我正在使用
我的当前
如果我从我的
在这两种情况下,
另外,
非常感谢您的建议!
tox
和coverage.py
在我的持续构建服务器上运行Python项目的测试。我还安装了一个来自供应商的pkg_x
包(不在PyPI上可用),使用python3.5 setup.py install
进行安装,它被放置在/usr/lib/python3.5/site-packages
中。现在我需要让测试代码可以使用这个包。我的当前
tox.ini
如下所示:[tox]
envlist = py35
[testenv]
deps = nose
coverage
commands = coverage run -m nose []
sitepackages = True
我这样运行测试:
python3.5 -m tox -- --verbose --with-doctest
那种方式失败了 - 我本地setup.py
中列出的依赖包(例如公共库,如more_itertools
)中没有任何一个可以找到,尽管它确实创建了类似.tox/py35/lib/python3.5/site-packages/more_itertools
这样的目录,看起来这些目录中包含相关的包。如果我启动.tox/py35/bin/python3.5
,sys.path
的内容如下:
>>> [re.compile('.*\\.tox').sub('.tox', x) for x in sys.path]
['',
'.tox/py35/lib64/python35.zip',
'.tox/py35/lib64/python3.5',
'.tox/py35/lib64/python3.5/plat-linux',
'.tox/py35/lib64/python3.5/lib-dynload',
'/usr/lib64/python3.5',
'/usr/lib/python3.5',
'.tox/py35/lib/python3.5/site-packages']
如果我从我的
tox.ini
中删除sitepackages = True
行,则可以进一步进行,因为像more_itertools
和setup.py
依赖项中的其他内容包都可以被找到,但是我上面提到的供应商包pkg_x
仍然无法找到。而且sys.path
看起来像这样:>>> [re.compile('.*\\.tox').sub('.tox', x) for x in sys.path]
['',
'.tox/py35/lib64/python35.zip',
'.tox/py35/lib64/python3.5',
'.tox/py35/lib64/python3.5/plat-linux',
'.tox/py35/lib64/python3.5/lib-dynload',
'/usr/lib64/python3.5',
'/usr/lib/python3.5',
'.tox/py35/lib/python3.5/site-packages',
'/usr/lib64/python3.5/site-packages',
'/usr/lib/python3.5/site-packages']
在这两种情况下,
.tox/py35/
目录似乎都没有包含供应商软件包pkg_x
的任何位置。虽然在我手动启动.tox/py35/bin/python3.5
时列出了/usr/lib/python3.5/site-packages
目录,但运行测试时实际上并没有找到pkg_x
。另外,
sitepackages = True
的实际效果似乎与其文档所述相反,请参阅http://tox.readthedocs.io/en/latest/config.html#confval-sitepackages=True|False。非常感谢您的建议!
tox
创建自己的虚拟环境。您对虚拟环境熟悉吗?在.tox
目录中激活虚拟环境并从那里进行调试。 - John Mee