python3 从 linux 上的包导入以进行测试

python3 importing from package on linux for tests

我有这个目录结构:

MyPackage/  
----/ __init__.py  

----/ tests / __init__.py  
----/ tests / test_file.py

----/ src /  
----/ src / __init__.py  
----/ src / file.py  

在test_file.py 我试过:

from ..src.file import MyClass
from MyPackage.src.file import MyClass

我正在尝试从测试文件夹中 运行 test_file.py,如下所示:

python3 test_file.py

但无论我怎么试,都行不通:

"No module named MyPackage"(对于"MyPackage.src.file")

"Parent module '' not loaded, cannot perform relative import"(如果我使用“..src.file”)

谁能告诉我问题出在哪里,我该怎么办?

谢谢!

您可以使用 sys.path.append()

手动将模块 basedir 添加到 PYTHONPATH
import os
import sys

SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
PACKAGE_DIR = SCRIPT_DIR + '/..'
sys.path.append(PACKAGE_DIR)

from src.file import MyClass

编辑:如果您总是从包 basedir..

执行
$ cd MyPackage
$ python tests/test_file.py

..包 basedir 应该包含在你的 PYTHONPATH 中并且导入应该像这样工作

from src.file import MyClass

我在某些系统上遇到过问题,当前目录没有自动添加到 PYTHONPATH。显式设置 PYTHONPATH 有帮助

$ PYTHONPATH=. python tests/test_file.py