【发布时间】:2012-04-30 20:00:35
【问题描述】:
我在 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()
我看到的是,当我从 tester 调用它们时,一些来自 foo 的导入将在 mod_bar 中得到 ImportError: cannot import name(至关重要的是,一些但不是全部)。如果我只运行 mod_bar,导入工作正常,如果我从 mod_bar 删除依赖项和导入并从测试器运行它,它工作正常;只有当一个类的子集从 f 导入到 b 和 t 并且我从 t 运行时,它才会中断。我已经尝试阅读有关导入如何工作的文档并在谷歌上搜索解决方案,但我还没有找到任何指向正确方向的东西。我感觉这与 Python 内部的一些晦涩部分有关,但我不知道那是什么。
我认为这准确地代表了正在发生的事情,尽管从tester 到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__() 是否会导致循环导入让我感到头疼?
【问题讨论】:
标签: python import project pydev lettuce