python - tox 下的测试不一定使用已安装的代码

标签 python tox

tox website 上列出的第一个功能是“使用不同的 Python 版本和解释器检查你的包是否正确安装”。这让我觉得如果我搞砸了我的 setup.py,测试将不会通过,并且我会被提醒我的 setup.py 已经变坏了。

事实并非如此。事实上,如果您按照通常的模式将您的模块或包放在与您的 tox.ini 相同的目录中,那么代码是从本地目录(又名 {toxinidir})导入的。这意味着你可以让你的 setup.py 什么都不做,tox 会告诉你它很好。在这一点上,很容易在你推送到 pypi 并尝试使用它之后才注意到这个问题。这是我希望避免出现的问题。

主要问题是空字符串在测试期间出现在 sys.path 上。 Python 将其解释为当前工作目录并从那里导入。

有什么方法可以配置 tox,使本地目录在测试期间不被使用?

目前我的解决方法是 cd {envtmpdir} && coverage run && mv .coverage {toxinidir},但这显然是一个丑陋的 hack。

这里我提供两个版本的代码:

我的目标是找到一个 tox 配置,避免上述问题,并且足够合理,推荐在所有项目中使用。

最佳答案

我注意到 nosetests 在其运行期间修改了 sys.path:它在一开始就将 check out 的代码添加到其中。这实质上打破了毒素试图创造的分离。要解决此问题,您只需将 -P 标志附加到 nosetests:

[tox]
envlist = py27

[testenv]
commands=
    nosetests -P tests
deps=
    nose
    -rrequirements.txt

此外,我必须附加 tests(将 nose 指向 tests/ 目录)以防止 nose importing 任何非- 测试代码(我使用的 C 扩展可能会或可能不会在结帐时构建)。

关于python - tox 下的测试不一定使用已安装的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23186845/

相关文章:

python - 空字典 Python 中的 KeyError

python - get() 在标记为唯一的字段上排除 MultipleObjectsReturned

python - QProgressDialog 的残骸挥之不去——有时

python - Tox 在安装模块时无法复制非 python 文件

pytest - 为 tox 设置 pytest arg 但不直接设置 pytest

python - tox:如何指定python micro版本

python - pytest-cov无法使用新的Coverage版本5.X生成报告,但适用于Coverage版本4.4.2

python - 大于 21 个字符的 CPython 字符串 - 内存分配

python - 使用open()打开文件时使用什么共享模式

python - 毒性警告 :test command found but not installed in testenv