7

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

事实并非如此。事实上,如果您按照通常的模式将模块或包放在与 tox.ini 相同的目录中,则代码是从本地目录(又名 {toxinidir})导入的。这意味着你可以让你的 setup.py 绝对不做任何事情,并且 tox 会告诉你它很好。那时,很容易直到你推送到 pypi 并尝试使用它之后才注意到问题。这是我想防止的问题。

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

有没有办法配置 tox 以便在测试期间不使用本地目录?

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

在这里,我提供了我们代码的两个版本:

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

4

1 回答 1

1

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

[tox]
envlist = py27

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

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

于 2014-08-08T07:56:59.540 回答