在 tox+pytest 中使用自己的包
Posted
技术标签:
【中文标题】在 tox+pytest 中使用自己的包【英文标题】:Use own package in tox+pytest 【发布时间】:2019-03-01 05:04:58 【问题描述】:我有想要测试的 python 应用程序。 这个应用程序正在导入很多包,例如:
import time
import sys
.
.
.
import mypackage
mypackage 是我自己的包。
当我启动应用程序时,一切正常。但是,一旦我尝试运行 tox 来测试它,我就会收到以下错误:
Collecting mypackage
Could not find a version that satisfies the requirement mypackage (from versions: )
No matching distribution found for mypackage
我了解 tox 无法安装 mypackage 依赖项,因为它不在 pip 中。您知道如何在此类应用程序上运行 tox 或如何使用 tox 安装自己的软件包吗?
我的 tox.ini 文件的内容:
[tox]
envlist = py36
[testenv]
deps =
pytest
coverage
time
sys
mypackage
commands =
python setup.py develop
coverage erase
coverage run -m pytest myapp/tests/
coverage report --omit='.tox/*'
【问题讨论】:
【参考方案1】:Tox 遍历 deps 中描述的所有包,并尝试使用pip install
安装所有包。如pip installing packages page 所述,您可以:
pip install /path/my/package
这意味着 deps 部分不仅接受来自 PyPI 的包,还接受路径指定的本地包。
只需将带有 setup.py 的包的根路径添加到 deps 部分即可。
deps =
pytest
coverage
time
sys
/projects/py/mypackage
【讨论】:
这里有什么特别的陷阱吗?我尝试在 tox.ini deps 中添加一个条目,其中包含带有 mypackage 的 setup.py 文件的目录的绝对路径。但是 tox 似乎并没有以安装该软件包的方式调用 pip 。错误是ERROR: code: could not install deps [pytest, coverage, pytest-cov, /Users/me/git/github/mywork/mypackage]; v = InvocationError('/Users/me/git/github/mywork/.tox/code/bin/python -m pip install pytest coverage pytest-cov mypackage', 1)
【参考方案2】:
如果您使用pip
而不是python setup.py
,我认为这应该可以通过多种方式实现:
-
您可以通过
pip install /path/to/private/dependency
手动安装依赖项,可以在安装要测试的包之前或在同一行中。这具有(次要)优势,您还可以使用-e
在可编辑模式下安装依赖项。
您可以使用pip install
的--find-links
选项,如对this question 的回答中所述 - 这具有依赖处理本身自动完成的优点,您只需指定自己的安装包并告诉pip
在哪里可以找到其他东西。重要的是,这也可以使用 environment variables 指定,因此您不必在 git 存储库的任何地方硬编码本地路径。
注意:我不确定选项 (2) 是否仅适用于 git 存储库或仅适用于适当的档案...我记得不久前与 --find-links
有过相关问题.
【讨论】:
以上是关于在 tox+pytest 中使用自己的包的主要内容,如果未能解决你的问题,请参考以下文章