是否有一种标准方法可以根据特定代码告诉 py.test 到 运行?

Is there a standard way to tell py.test to run against specific code?

我正在尝试 运行 Python 项目的单元测试使用 py.test。直到最近我才使用 nose 并且它 运行 针对我的本地源代码而不是安装的包进行测试,但是 py.test 似乎想要 运行 针对安装的包,这意味着我有到 运行 python setup.py install 每次测试前 运行.

项目组织如下:

/project
    /project  
        __init__.py
        project_file.py
    /test
        __init__.py
        /test_project
            test_project_file.py

我发现根据本地代码从 py.test 到 运行 的唯一方法是在顶部 /project 文件夹中 运行 python -m pytest。这是非常 st运行ge,因为 运行ning py.test 在同一位置 运行s 与已安装的代码。根据 the docs 这些命令应该是等效的,并且 --version returns 两者的信息相同。

有没有一种标准的方法可以根据特定代码告诉 py.test 到 运行?我没能在 py.test 的文档中找到明确的答案。

我的第一个错误是使用 python setup.py install 而不是 python setup.py develop 来设置我的项目。 Pytest 希望您使用后者,这似乎是个好习惯。

如果在安装相同代码时需要针对本地代码运行,似乎有办法做到这一点。 提到了pytest的一个"hidden feature",你可以在你的根目录下放一个conftest.py文件来告诉pytest使用你的本地代码运行。 Pytest 似乎使用您的整体配置文件的位置来确定它认为您的根目录是什么。在我的例子中,这个文件是 pytest.ini。

出于好奇,我认为 python -m pytest 运行 宁使用 py.test 没有的本地代码是由于 Python 添加的默认行为它被调用到 sys.path.

的目录