当前位置: 代码迷 >> python >> Python循环导入,来自lib导入模块vs导入lib.module
  详细解决方案

Python循环导入,来自lib导入模块vs导入lib.module

热度:61   发布时间:2023-07-14 09:52:00.0

我有两个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 a分别from lib import bfrom lib import a切换,则上述Python命令将以ImportError终止。

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

参考:

由于似乎没有直接解决循环导入问题的方法,因此我采取了一种解决方法。

在我的实际用例中, 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
...

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

您的lib文件夹中是否有__init__.py文件? 如果是,则有两种可能性:

1)__init__.py为空,可以从lib导入a,b使用

a.foo b.bar

2)在您的__init__.py中有指令导入a,b,在这种情况下,您可以编写

导入lib.a作为导入lib.b作为b

希望这对你有帮助

  相关解决方案