valory-xyz / open-aea

A framework for open autonomous economic agent (AEA) development - no package vendor is prioritised over other package vendors
https://open-aea.docs.autonolas.tech
Apache License 2.0
63 stars 14 forks source link

Circular import in aea_cli_ipfs plugin #755

Closed dvilelaf closed 1 week ago

dvilelaf commented 1 week ago

aea_cli_ipfs depends on aea.cli, and aea.cli depend on aea_cli_ipfs. The reason is several instances like this one where the aea_cli_ipfs module is imported just to set the IS_IPFS_PLUGIN_INSTALLED variable.

We can replace thise check without importing the plugin: importlib.util.find_spec("aea_cli_ipfs")

(open-autonomy-compose-py3.11) david@XPS13:~/Valory/repos/open-autonomy-compose/open_autonomy_compose$ python test.py 
Traceback (most recent call last):
  File "/home/david/Valory/repos/open-autonomy-compose/open_autonomy_compose/test.py", line 1, in <module>
    from open_autonomy_compose.studio.project import Project
  File "/home/david/Valory/repos/open-autonomy-compose/open_autonomy_compose/studio/__init__.py", line 13, in <module>
    from open_autonomy_compose.studio.apps import Apps
  File "/home/david/Valory/repos/open-autonomy-compose/open_autonomy_compose/studio/apps.py", line 14, in <module>
    from open_autonomy_compose.studio.packages import Packages
  File "/home/david/Valory/repos/open-autonomy-compose/open_autonomy_compose/studio/packages.py", line 13, in <module>
    from aea_cli_ipfs.registry import fetch_ipfs  # type: ignore[import]
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/david/.cache/pypoetry/virtualenvs/open-autonomy-compose-KbIvEUii-py3.11/lib/python3.11/site-packages/aea_cli_ipfs/registry.py", line 33, in <module>
    from aea.cli.registry.settings import DEFAULT_IPFS_URL_LOCAL
  File "/home/david/.cache/pypoetry/virtualenvs/open-autonomy-compose-KbIvEUii-py3.11/lib/python3.11/site-packages/aea/cli/__init__.py", line 24, in <module>
    from .core import cli
  File "/home/david/.cache/pypoetry/virtualenvs/open-autonomy-compose-KbIvEUii-py3.11/lib/python3.11/site-packages/aea/cli/core.py", line 38, in <module>
    from aea.cli.generate import generate
  File "/home/david/.cache/pypoetry/virtualenvs/open-autonomy-compose-KbIvEUii-py3.11/lib/python3.11/site-packages/aea/cli/generate.py", line 31, in <module>
    from aea.cli.packages import get_package_manager
  File "/home/david/.cache/pypoetry/virtualenvs/open-autonomy-compose-KbIvEUii-py3.11/lib/python3.11/site-packages/aea/cli/packages.py", line 40, in <module>
    from aea_cli_ipfs.registry import (  # type: ignore # noqa: F401 # pylint: disable=unused-import
ImportError: cannot import name 'fetch_ipfs' from partially initialized module 'aea_cli_ipfs.registry' (most likely due to a circular import) (/home/david/.cache/pypoetry/virtualenvs/open-autonomy-compose-KbIvEUii-py3.11/lib/python3.11/site-packages/aea_cli_ipfs/registry.py)
solarw commented 1 week ago

just need to import aea modules first, and plugins after.