我在 PyDev 中设置了 3 个项目,它们的项目引用列表中都有彼此。出于说明目的:
proj_f
pack_foo
mod_fooa (contains class Fooa)
mod_foob (contains class Foob)
mod_faa (contains class Faa)
pack_fii
mod_fiia (contains class Fiia)
mod_fiib (contains class Fiib)
proj_b
mod_bar (contains function func_bar)
pack_baz
mod_baza (contains class Baza)
mod_bazb (contains class Bazb)
proj_t
tester (what I'm running from)
再举一个例子,测试人员:
from pack_foo.mod_fooa import Fooa
from pack_fii.mod_fiia import Fiia
from mod_bar import func_bar
func_bar(Fooa(), Fiia())
和 mod_bar:
from pack_foo.mod_fooa import Fooa
from pack_fii.mod_fiia import Fiia
def func_bar(fooa, fiia):
if not fooa:
fooa = Fooa()
if not fiia:
fiia = Fiia()
fooa.do_magic()
fiia.do_magic()
我所看到的是,ImportError: cannot import name
当我从 tester 调用它们时,来自 foo 的一些导入将进入 mod_bar (至关重要的是,一些但不是全部)。如果我只运行 mod_bar,导入工作正常,如果我从 mod_bar 删除依赖项和导入并从测试器运行它,它工作正常;只有当一个类的子集从 f 导入到 b 和 t 并且我从 t 运行时,它才会中断。我已经尝试阅读有关导入如何工作的文档并在谷歌上搜索解决方案,但我没有找到任何可以指出我正确方向的东西。我有一种感觉,这与 Python 内部的一些晦涩的部分有关,但我不知道那是什么。
tester
我认为这准确地代表了正在发生的事情,尽管从to的引用mod_bar
是间接的(tester
是我在处理代码时用来监视代码的文件,而mod_bar
实际上是生菜,这会增加一层复杂性地形文件,而其他一些正在调用的模块正在加载生菜tester
。)任何人都可以为我提供至少一些地方来开始寻找有关如何解决此问题的信息吗?
编辑:
我正在查看更多内容,特别是堆栈跟踪:
Traceback (most recent call last):
File "C:\Python27\Lib\site-packages\lettuce\__init__.py", line 53, in <module>
terrain = fs.FileSystem._import("terrain")
File "C:\Python27\Lib\site-packages\lettuce\fs.py", line 74, in _import
module = imp.load_module(name, fp, pathname, description)
File "C:\Users\adminsetup\workspace\nytd_lettuce_lib\terrain.py", line 6, in <module>
from session.session import Session
ImportError: cannot import name Session
terrain = fs.FileSystem._import("terrain")
是否会导致lettuce.__init__()
循环进口让我感到头疼?