如何在不设置PYTHONPATH的情况下从相邻包中导入模块

时间:2018-07-12 11:36:50

标签: python python-2.7 python-import

我有一个结构如下的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包含一些顶级setUptearDown方法用于所有测试。所以当我尝试这个:

import helpers
from helpers.blaaa import Blaaa

test_pkg内部的某个模块中,我所有的涉众都不满意。我得到ImportError: No module named ...,而pylint也抱怨找不到它。我可以忍受pylint在测试文件夹中抱怨,但是如果我在项目目录和测试目录中运行它,nosetests也快要死了。我不希望不使用点(。)进行相对导入。

1 个答案:

答案 0 :(得分:0)

问题是您无法通过从..helpers导入来转义当前目录。

但是,如果您使用以下命令在测试目录中启动测试代码

python3 -m test_pkg.foo

当前目录将成为测试目录,并且导入助手将起作用。在不利的一面,这意味着您必须从导入。在test_pkg内部。