我有两个 python 模块,a.py
和 b.py
,它们都在相对于当前目录的 lib/
中.假设每个模块都需要另一个模块的功能。
a.py:
import lib.b
...
b.py:
import lib.a
...
上面的例子适用于
PYTHONPATH=./lib python -c 'from lib import a, b'
但是,如果我将 a.py
和 b.py
中的导入切换为 from lib import b
和 from lib import a
,上面的 Python 命令以 ImportError
终止。
有人可以解释一下为什么会这样吗?我没有尝试从 a
或 b
导入任何成员。 (在那种情况下,我会从一个未初始化的模块导入,正如下面提到的问题所指出的那样。)
引用:
最佳答案
由于似乎没有直接的方法来解决循环导入问题,我采用了一种解决方法。
在我的实际用例中,模块a
导入模块b
只是为了调用函数b.fn
,所以我决定把fn
在第三个模块 c
中导入 c
代替:
c.py
def fn():
...
b.py
from lib import a
from lib import c
...
# Explicitly assign `fn` into this module.
fn = c.fn
(以上也可以用 from lib.c import fn
完成,但我更喜欢显式版本。)
a.py
from lib import c
...
这样,a
和 b
之间的循环导入就消失了,任何导入 b
的附加模块都可以使用 b .fn
直接。
关于Python 循环导入, `from lib import module` 与 `import lib.module`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22397610/