Python循环导入,`从lib导入模块`到`导入lib.module`

时间:2014-03-14 06:19:58

标签: python python-2.7 import

我有两个python模块a.pyb.py,它们都在lib/相对于当前目录。假设每个模块都需要另一个模块的功能。

a.py:

import lib.b
...

b.py:

import lib.a
...

以上示例适用于

PYTHONPATH=./lib python -c 'from lib import a, b'

但是,如果我将a.pyb.py中的导入分别切换为from lib import bfrom lib import a,则上述Python命令将以ImportError终止。< / p>

有人可以解释为什么会中断吗?我不是要从ab导入任何成员。 (在这种情况下,我将从未初始化的模块导入,因为下面引用的问题指出。)

参考:

  1. python circular imports once again (aka what's wrong with this design)

2 个答案:

答案 0 :(得分:1)

由于似乎没有直接的方法来解决循环导入,我采取了解决方法。

在我的实际使用案例中,模块a导入模块b仅调用函数b.fn,因此我决定将fn放入第三个模块{{1}而是导入c

c.py

c

b.py

def fn():
  ...

(以上也可以使用from lib import a from lib import c ... # Explicitly assign `fn` into this module. fn = c.fn 完成,但我更喜欢显式版本。)

a.py

from lib.c import fn

这样,from lib import c ... a之间的循环导入就消失了,导入b的任何其他模块都可以直接使用b

答案 1 :(得分:0)

在你的lib文件夹中有一个__init__.py文件? 如果是,您有2种可能性:

1)__ init__.py为空,您可以使用lib import a,b

a.foo b.bar

2)在你的__init__.py中有istructions导入a,b在这种情况下你可以写

将lib.a导入为 将lib.b导入为b

希望这能帮到你