我有一些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
我的问题是,当我运行测试py.test
时,我收到错误
ImportError:没有名为' mypkg'
的模块
我可以通过安装软件包python setup.py install
来解决这个问题,但这意味着测试是针对安装的软件包而不是本地软件包运行的,这使得开发非常繁琐。每当我进行更改并希望运行测试时,我需要重新安装,否则我正在测试旧代码。
我该怎么办?
答案 0 :(得分:8)
正常的开发方法是使用virtualenv并在virtualenv中使用pip install -e .
(这几乎等同于python setup.py develop
)。现在,您的源目录将用作sys.path上的已安装包。
当然还有很多其他方法可以让你的软件包在sys.path上进行测试,请参阅Ensuring py.test includes the application directory in sys.path以获得更完整答案的问题。
答案 1 :(得分:2)
我知道这个问题已经结束,但是我经常使用的一种简单方法是从根(包的父级)通过pytest
调用python -m
。
$ python -m pytest tests
之所以可行,是因为-m
选项将当前目录添加到python路径,因此mypkg
被检测为本地软件包(而不是已安装的软件包)。
请参阅: https://docs.pytest.org/en/latest/usage.html#calling-pytest-through-python-m-pytest
答案 2 :(得分:-1)
使用from .. import mypkg
导入包。为此,您需要将(空)__init__.py
个文件添加到tests目录和包含目录中。 py.test
应该照顾其余部分。