tox website上列出的第一个功能是"使用不同的Python版本和解释器"检查您的软件包安装是否正确。这让我觉得,如果我搞砸了我的setup.py,那测试就不会通过,而且我会收到关于我的setup.py已经坏了的事实的提醒。
事实并非如此。事实上,如果您遵循将模块或包放在与tox.ini相同的目录中的常规模式,则代码将从本地目录(aka {toxinidir})导入。这意味着你可以让你的setup.py绝对没有任何东西,tox会告诉你它的罚款。在那时,在你推到pypi并尝试使用之前,很容易就不会注意到这个问题。这是我想要防止的问题。
主要问题是在测试期间,空字符串出现在sys.path上。 Python将此解释为当前工作目录并从那里导入。
有没有办法配置tox,以便在测试期间不使用本地目录?
目前我的解决方法是cd {envtmpdir} && coverage run && mv .coverage {toxinidir}
,但这显然是一个丑陋的黑客。
这里我提供了两个版本的代码:
我的目标是找到一个避免上述问题的tox配置,并且足够合理,建议在所有项目中使用。
答案 0 :(得分:1)
我注意到nosetests
在运行期间修改了sys.path
:它在一开始就将检出的代码添加到其中。这基本上打破了tox试图创造的分离。要解决此问题,您只需将-P
标记附加到nosetests
:
[tox]
envlist = py27
[testenv]
commands=
nosetests -P tests
deps=
nose
-rrequirements.txt
另外,我必须附加tests
(指向tests/
目录)以防止import
任何非测试代码(我正在使用C扩展名)可能会或可能不会在结账时建立。)