我正在使用 py.test
来测试我的 python 代码。我项目的相关结构是
-myproject
file.py
file2.py
-test/
input.txt
input2.dat
test_part.py
-regress/
file2_old.py
__init__.py
-test/
test_file2_regression.py
test_part.py
导入 file
和 file2
和 test_file2_regression.py
导入 file2
和 regress.file2_old
。如果我在控制台中运行 pytest
,我会收到导入错误,即包不存在。另一方面,运行 python -m pytest
工作得很好,但前提是我从 myproject/
目录运行它。
执行此操作的正确方法是什么,以使其在我的项目中的任何位置工作?我已经尝试修改 PYTHONPATH
但老实说我不知道如何正确地修改它。
更多信息:
我没有任何设置文件,我的 __init__
只是空文件。如果需要操作 PYTHONPATH
,则需要相对于 myproject
完成,因为我在多台机器上使用它。我正在运行 python 2.7。
我已经 checkout :
但这并没有真正帮助我。
最佳答案
在项目的任何目录中使用 pytest
命令的解决方案是在导入之前包含在 test*.py
文件中:
import os
from sys import path
PATH = os.path.abspath(os.path.dirname(__file__))
path.append(os.path.join(PATH, os.pardir, os.pardir))
其中适当数量的 os.pardir
用于导航到项目目录,__init__.py
文件允许从那里导入模块。
argv[0]
和 inspect.getsourcefile
都没有提供必要的信息。 argv[0]
包含使用的 py.test
模块的位置,getsourcefile
方法仅返回 None
。
编辑:从 Python 3.4 开始,我们可以使用现代 pathlib
代替 os.path
:
from pathlib import Path
from sys import path
PATH = Path(__file__).resolve()
path.append(PATH.parents[2])
关于python - pytest 集成 - 如何正确导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40318805/