在Python中的循环模块依赖和相对导入

16 浏览
0 Comments

在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.apkg.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

为什么会出现这个错误?这种情况不是和上面的情况差不多吗?(和这个问题有关吗?)

编辑:这个问题与软件设计无关。我知道有避免循环依赖的方法,但无论如何,我对错误的原因感兴趣。

0