我有一个结构如下的python 2.7 项目:
project
|
|____src
| |
| |__pkg
| |
| |__ __init__.py
|
|____test
|
|__test_pkg
| |
| |__ __init__.py
|
|__helpers
| |
| |__ __init__.py
|
|__ __init__.py
我将src
文件夹设置为PYTHONPATH
,因此在src
内的程序包中可以很好地进行导入。我在eclipse中以及通过bash和make
文件(用于项目)中在eclipse中使用eclipse,pylint和鼻子测试。所以我必须让每个利益相关者满意!
问题是从测试中的助手包中导入一些代码。奇怪的是,我的测试也是一个Python包,其中__init__.py
包含一些顶级setUp
和tearDown
方法用于所有测试。所以当我尝试这个:
import helpers
from helpers.blaaa import Blaaa
在test_pkg
内部的某个模块中,我所有的涉众都不满意。我得到ImportError: No module named ...
,而pylint也抱怨找不到它。我可以忍受pylint在测试文件夹中抱怨,但是如果我在项目目录和测试目录中运行它,nosetests
也快要死了。我不希望不使用点(。)进行相对导入。
答案 0 :(得分:0)
问题是您无法通过从..helpers导入来转义当前目录。
但是,如果您使用以下命令在测试目录中启动测试代码
python3 -m test_pkg.foo
当前目录将成为测试目录,并且导入助手将起作用。在不利的一面,这意味着您必须从导入。在test_pkg内部。