如何在Eclipse使用PyDev进行Python相对导入?
我正在做一个Python项目,这个项目在我之前就已经存在于一个SVN代码库里。当我第一次下载这个项目时,发现它的结构有点奇怪,类似于:
Proj\
src\
tags\
trunk\
然后,所有的Python模块文件都在src\文件夹里,但实际上src\只是一个逻辑文件夹,里面没有整体的包。项目里没有任何地方有__init__.py文件。所以我想重新整理一下结构,至少让我能在项目中使用相对导入。我还想把它设置得更像这样。
Proj\
src\
model\
controller\
view\
test\
tags\
trunk\
但是,我尝试设置这个结构后,无论我怎么做,只要涉及到包的相对导入,就总是无法解决。我在每个包的层级里都放了一个__init__.py文件,包括在src\文件夹里,所有的__init__.py文件里都有定义__all__。可是,当我在test\包里做单元测试时,尝试导入如下:
from ..model.foo import Foo
想从model包里的foo.py模块中导入Foo类时,它总是无法找到。为了排除是单元测试的问题,我还尝试在controller包里的一个模块中导入依赖于model包中一个类的内容,反之亦然,但都没有成功。我该怎么解决这个问题呢?
1 个回答
3
你有没有把根文件夹添加到你的系统路径里?
import sys
sys.path.append(<place the Proj dir here>)
这样你就可以像下面这样导入了:
from src.model.somefile import Something
如果你不知道Proj的绝对路径,你可以尝试使用一些组合,比如:
os.path.dirname(os.getcwd())