我有两个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
终止。< / p>
有人可以解释为什么会中断吗?我不是要从a
或b
导入任何成员。 (在这种情况下,我将从未初始化的模块导入,因为下面引用的问题指出。)
答案 0 :(得分:1)
由于似乎没有直接的方法来解决循环导入,我采取了解决方法。
在我的实际使用案例中,模块a
导入模块b
仅调用函数b.fn
,因此我决定将fn
放入第三个模块{{1}而是导入c
:
c
def fn():
...
(以上也可以使用from lib import a
from lib import c
...
# Explicitly assign `fn` into this module.
fn = c.fn
完成,但我更喜欢显式版本。)
from lib.c import fn
这样,from lib import c
...
和a
之间的循环导入就消失了,导入b
的任何其他模块都可以直接使用b
。
答案 1 :(得分:0)
1)__ init__.py为空,您可以使用lib import a,b
a.foo b.bar
2)在你的__init__.py中有istructions导入a,b在这种情况下你可以写
将lib.a导入为 将lib.b导入为b
希望这能帮到你