sys.path包括py.test rootdir,以使测试相对于项目根目录导入

时间:2016-05-17 17:01:39

标签: 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目录。

我注意到py.test检测到rootdir,这被认为是我的项目的根,它是proj目录。这是我在测试期间在sys.path中想要的,所以我的所有代码都是相对于该目录的。我如何确保py.test在sys.path中包含(...)/ proj / ,以便我可以在test_a.py中import mypackage.a

1 个答案:

答案 0 :(得分:4)

我使用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并按照here给出的建议。