结构如下:模块test
包含两个子模块test.foo
和test.bar
。
test.foo
有一个使用inc()
的函数test.bar.bar()
所以基于python文档from . 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
答案 0 :(得分:4)
解决方案是将两个模块所需的代码分解为由两者导入的第三个模块。例如,将foo
函数放入第三个模块。
之前有很多StackOverflow问题,例如Circular import dependency in Python。另请参阅http://effbot.org/zone/import-confusion.htm#circular-imports。