字词
结构如下:一个模块test
包含两个子模块test.foo
和test.bar
。
test.foo
有一个函数 inc()
使用 test.bar.bar()
所以基于 python 文档 从。 import bar
是包含它的正确方法,它按预期工作。
test.bar
但是,还有一个函数 inc2
使用 test.foo.foo
,但是当 from .使用 import foo
时,这两个模块都会中断。
实现此目标的正确方法是什么?我在 python 文档或搜索中发现的很少。
代码
测试/_初始化_.py
#empty
测试/foo.py
from . import bar
def foo():
print("I do foo")
def inc():
print(bar.bar())
测试/bar.py
from . import foo
def bar():
print("I do bar")
def inc2():
print(foo.foo())
错误 1
>>> import test.foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "test/foo.py", line 1, in <module>
from . import bar
File "test/bar.py", line 1, in <module>
from . import foo
ImportError: cannot import name foo
错误 2
>>> import test.bar
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "test/bar.py", line 1, in <module>
from . import foo
File "test/foo.py", line 1, in <module>
from . import bar
ImportError: cannot import name bar
最佳答案
解决方案是将两个模块所需的代码提取到第三个模块中,该模块由两个模块导入。例如,将 foo
函数放入第三个模块。
以前有很多关于此的 StackOverflow 问题,例如 Circular import dependency in Python .另见 http://effbot.org/zone/import-confusion.htm#circular-imports .
关于python - 循环内部引用子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11598443/