在Python中使用unittest进行相对导入

22 浏览
0 Comments

在Python中使用unittest进行相对导入

我试图使用Python的unittest和相对导入,但是我似乎无法弄清楚。我知道有很多相关的问题,但是到目前为止没有一个能够帮到我。如果这是重复的问题,我很抱歉,但我真的很感激任何帮助。我试图使用PEP 328中的语法:http://www.python.org/dev/peps/pep-0328/,但我一定弄错了什么。

我的目录结构如下:

project/
    __init__.py
    main_program.py
    lib/
        __init__.py
        lib_a
        lib_b
    tests/
        __init__.py
        test_a
        test_b

我使用以下命令来运行我的测试:

python -m unittest test_module1 test_module2

test_a需要同时导入lib/lib_a和main_program。这是我试图使用的test_a中的导入代码:

from ..lib import lib_a as lib
from ...project import main_program

两者都引发了以下错误:

ValueError: Attempted relative import in non-package

我所有的init.py文件目前都是空的。

非常感谢任何具体的建议!

编辑:

这可能是答案:Python Packages?

我仍在验证这是否可行。

编辑II:

为了澄清,目前我已经尝试了3种不同的方式来运行我的测试文件:

project/tests $ python -m unittest test_a
project/tests $ python -m test_a
project/tests $ ./test_a

这三种方式都以与上述相同的错误失败。当我在project目录中使用相同的三种语法时,我得到以下错误:

ValueError: Attempted relative import beyond toplevel package

再次感谢。

0