【发布时间】:2021-03-18 15:40:43
【问题描述】:
我在尝试运行测试时收到 ImportError: cannot import name 'Result' from partial initialized module 'libs.elastic_search_hunt'(很可能是由于循环导入)错误。 但我的代码中没有看到任何循环导入。
我有一个名为 elastic_search_hunt 的包,其中包含 3 个模块:
- elastic_query.py
- elastic_query_result.py
- search_processor.py
我也有 __init__.py 文件,其中包含以下文本:
from libs.elastic_search_hunt.elastic_query import Query
from libs.elastic_search_hunt.search_processor import SearchProcessor
from libs.elastic_search_hunt.elastic_query_result import Result
__all__ = ['Query', 'SearchProcessor', 'Result'] # I guess it does not have any effect
elastic_query.py 只有外部导入。
elastic_query_result.py 一样。
search_processor.py 有那些导入:
from . import Query
from . import Result
然后我有一个测试文件,它导入 Query 类:
from libs.elastic_search_hunt import Query
当我运行测试时,我得到这个错误:
test_query.py:2: in <module>
from libs.elastic_search_hunt import Query
..\src\libs\elastic_search_hunt\__init__.py:2: in <module>
from libs.elastic_search_hunt.search_processor import SearchProcessor
..\src\libs\elastic_search_hunt\search_processor.py:4: in <module>
from . import Result
E ImportError: cannot import name 'Result' from partially initialized module 'libs.elastic_search_hunt' (most likely due to a circular import)
但我的代码中哪里有循环导入? 我只能假设,当我从测试中导入 Query 时,它也会从 __init__.py 模块中导入 search_processor,而该模块又会加载 再查询一次。但是错误是关于 elastic_query_result 模块中的 Result 的,我只看到 Result 的一个导入。
当我从 __init__.py 中删除 search_processor 时,一切正常。
我已经阅读了很多关于循环导入的问题,但所有这些问题都很明显,并且没有触及 __init__.py。我错过了什么?
【问题讨论】:
-
你能解释一下 from * * libs.elastic_search_hunt * * import * * Query * * 的作用吗?我还没有找到关于这种双星号使用的任何文档。
-
@SamuelO.D.对不起,那是一个错字。我已经修好了
标签: python import package circular-dependency