问题描述
我有两个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
希望这对你有帮助