tox网站上列出的第一个功能是"使用不同的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配置,并且足够合理,建议在所有项目中使用.
我注意到它在运行过程中nosetests发生了修改sys.path:它在一开始就将签出的代码添加到其中。这基本上打破了毒素试图创造的分离。要解决此问题,您只需将-P标志附加到nosetests:
[tox]
envlist = py27
[testenv]
commands=
nosetests -P tests
deps=
nose
-rrequirements.txt
Run Code Online (Sandbox Code Playgroud)
另外,我必须附加tests(将nose指向tests/目录)以防止nose执行import任何非测试代码(我使用的C扩展可能会或可能不会在结帐中构建)。