问题描述
我有两个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 a
分别from lib import b
和from lib import a
切换,则上述Python命令将以ImportError
终止。
有人可以解释一下为什么会中断吗?
我不是要从a
或b
导入任何成员。
(在那种情况下,我将从一个未初始化的模块中导入,如以下引用的问题所指出。)
参考:
1楼
由于似乎没有直接解决循环导入问题的方法,因此我采取了一种解决方法。
在我的实际用例中, 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
2楼
您的lib文件夹中是否有__init__.py文件? 如果是,则有两种可能性:
1)__init__.py为空,可以从lib导入a,b使用
a.foo b.bar
2)在您的__init__.py中有指令导入a,b,在这种情况下,您可以编写
导入lib.a作为导入lib.b作为b
希望这对你有帮助