在Python中的循环模块依赖和相对导入
- 论坛
- 在Python中的循环模块依赖和相对导入
16 浏览
在Python中的循环模块依赖和相对导入
假设我们有两个存在循环依赖的模块:
# a.py import b def f(): return b.y x = 42
# b.py import a def g(): return a.x y = 43
这两个模块位于目录pkg
中,该目录下有一个空的__init__.py
文件。按照这个回答中所解释的那样,导入pkg.a
或pkg.b
是可以正常工作的。但是,如果我将导入语句改为相对导入
from . import b
当我尝试导入其中一个模块时,会出现ImportError
:
>>> import pkg.a Traceback (most recent call last): File "", line 1, in File "pkg/a.py", line 1, in from . import b File "pkg/b.py", line 1, in from . import a ImportError: cannot import name a
为什么会出现这个错误?这种情况不是和上面的情况差不多吗?(和这个问题有关吗?)
编辑:这个问题与软件设计无关。我知道有避免循环依赖的方法,但无论如何,我对错误的原因感兴趣。