Python sys.path包括py.test rootdir,用于相对于项目根导入测试
我在pytest的sys.path列表中没有包含我的项目rootdir时遇到问题。相反,它包括默认情况下测试所在的目录 这是我的项目结构Python sys.path包括py.test rootdir,用于相对于项目根导入测试,python,pytest,Python,Pytest,我在pytest的sys.path列表中没有包含我的项目rootdir时遇到问题。相反,它包括默认情况下测试所在的目录 这是我的项目结构 proj/ setup.py mypackage/ __init__.py a.py tests/ test_a.py 使用运行pytest时 py.test proj/mypackage/tests 它将proj/mypackage/tests插入sys.path,这不好,因为现在我无法导入,因为它与tests
proj/
setup.py
mypackage/
__init__.py
a.py
tests/
test_a.py
使用运行pytest时
py.test proj/mypackage/tests
它将proj/mypackage/tests插入sys.path,这不好,因为现在我无法导入,因为它与tests目录无关
我注意到py.test检测到一个rootdir,它被识别为我的项目的根目录,即proj目录。这是我在测试期间在sys.path中想要的,因此我的所有代码都是相对于该目录的。如何确保py.test在sys.path中包含(…)/proj/,以便在test_a.py中导入mypackage.a。我使用conftest.py将包路径(相对于conftest.py文件)附加到sys.path,以便导入包。大概是这样的:
# contents of conftest.py
import sys
from os.path import abspath, dirname
package_path = abspath(dirname(dirname(__file__)))
sys.path.insert(0, package_path)
然后将该文件放在tests目录中。默认情况下,conftest.py文件将在任何其他文件之前运行,因此其他测试将能够导入mypackage
另一种可能更好的方法是添加setup.py并遵循给出的建议