如何在不安装包的情况下运行测试?

Col*_*nic 14 python pytest

我有一些Python包和一些测试.这些文件是在http://pytest.org/latest/goodpractices.html#choosing-a-test-layout-import-rules之后布局的.

将测试放在实际应用程序代码之外的额外目录中,如果您有许多功能测试或其他原因需要将测试与实际应用程序代码分开(通常是个好主意):

setup.py   # your distutils/setuptools Python package metadata
mypkg/
    __init__.py
    appmodule.py
tests/
        test_app.py
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我运行测试时py.test,我收到一个错误

ImportError:没有名为'mypkg'的模块

我可以通过安装软件包来解决这个问题,python setup.py install但这意味着测试针对已安装的软件包而不是本地软件包运行,这使得开发非常繁琐.每当我进行更改并希望运行测试时,我需要重新安装,否则我正在测试旧代码.

我能做什么?

Kot*_*ori 17

我知道这个问题已经关闭,但我经常使用的一种简单方法是从根(包的父级)调用pytestvia python -m

$ python -m pytest tests
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为-moption 将当前目录添加到 python 路径,因此mypkg被检测为本地包(而不是安装的包)。

请参阅:https : //docs.pytest.org/en/latest/usage.html#calling-pytest-through-python-m-pytest


flu*_*lub 10

正常的开发方法是使用virtualenv并pip install -e .在virtualenv中使用(这几乎等同于python setup.py develop).现在,您的源目录将用作sys.path上的已安装包.

当然还有很多其他的方法可以让你的软件包在sys.path上进行测试,请参阅确保py.test包含sys.path中的应用程序目录,以获得对此完全相同的问题有更完整答案的问题.