如何使用Eclipse和PyDev在Python中进行相对导入工作?

How do I make relative importing work in Python using Eclipse with PyDev?

所以我正在做一个Python项目,在SVN报告中我之前就在这里。当我第一次拉动它时,它的结构有点奇怪,因为它类似于:

1
2
3
4
Proj\
    src\
    tags\
    trunk\

然后,所有的东西都在src中,是python模块文件,除了src是一个逻辑文件夹,里面没有完整的包。项目中的任何地方都没有初始版本。所以我想重组它,至少这样我可以通过我的项目使用相对进口。我还想设置它,使它看起来更像这样。

1
2
3
4
5
6
7
8
Proj\
    src\
        model\
        controller\
        view\
        test\
    tags\
    trunk\

但是,我尝试了设置这个,不管我做什么,它都无法在我必须遍历包时解决相对导入问题。我在每个级别包中放置了一个uuu init_uuu.py文件,其中一个包含在srcfolder中,所有文件都定义了uu all_uuuu。但是,当我尝试在测试包中进行单元测试并执行导入操作时,会说:

1
from ..model.foo import Foo

要尝试从模型包内的模块foo.py导入foo类,它无法解析。为了防止单元测试出现问题,我还对控制器包中依赖于模型包中类的模块进行了尝试,反之亦然。他们都没用。如何解决此问题?


是否已将根文件夹添加到系统路径中?

1
2
import sys
sys.path.append(<place the Proj dir here>)

然后可以导入如下内容:

1
from src.model.somefile import Something

如果您不知道proj的绝对路径,则可以使用以下组合:

1
os.path.dirname(os.getcwdu())