我有一个支持python 2.4,2.6和2.7的构建盒。这导致在他们自己的python安装中根据需要安装各种版本的pips。我正在使用tox
通过setup.py
运行测试。
每当我运行{python2.7_installation_dir}/bin/python setup.py test
时,都会生成.tox
目录。在.tox
目录中我运行
py27/bin/pip --version
pip 1.4.1 from {my_package}/.tox/py27/lib/python2.7/site-packages (python 2.7)
[buildbot@BUILD-SERV-01 .tox]# python2.7
Python 2.7.6 (default, Nov 20 2013, 15:33:09)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip
>>> pip.__version__
'1.5.2'
因此.tox目录中的pip版本是1.4.1,其中为我用来执行setup.py test
的python解释器安装的pip是1.5.2。这在运行测试时会导致错误,因为它使用pip来安装目录,其中一些来自外部源,而在1.5.2中我们需要为其中一个模块明确设置--allow-external --allow-unverified标志。在1.4.1中不存在,每次通过tox调用测试时都会导致错误。
只有一个python2.7安装,它是从源代码安装的。但我认为它正在运行pip 1.4.1,但现在已升级为使用1.5.2。如何使用旧版本?是否有任何.pth
文件或可能遗留下来的文件需要清理?
我可以放弃tox
并直接运行pytests但我更喜欢通过tox
运行它们。
如果您想查看日志,请告诉我,我可以使用日志更新问题。
答案 0 :(得分:1)
tox
在.tox/py27
,.tox/py35
等处创建了一个virtualenv,具体取决于您测试的python版本(即基于您envlist
中的tox.ini
或-e
选项的参数)。
tox
然后将pip
安装到此virtualenv,您的软件包以及您的软件包所依赖的所有软件包中。
在进一步的运行中,为了节省时间,virtualenv被重用,只重新安装了包(并且可能更新了依赖项)。除非您执行以下操作,否则pip
将保留原始版本:
./tox/py27/bin/pip install -U pip
或重新初始化完整的virtualenv:
tox -r -e py27
(或tox -r
适用于.tox
中所有python版本的所有envlist
虚拟版。)
如果您还想分析tox
设置的方式,请先致电:
tox -r -e py27 -vv
从输出中可以看到重新创建步骤:
py27 recreate: /src/site-packages/your/package/.tox/py27
removing /src/site-packages/your/package/.tox/py27
setting PATH=/src/site-packages/your/package/.tox/py27/bin:/opt/python/2.7/bin:........
/src/site-packages/your/package/.tox$ python -m virtualenv --python /opt/python/2.7.13rc1/bin/python py27 >/src/site-packages/your/package/.tox/py27/log/py27-0.log
现在转到.tox目录并重做virtualenv创建详细信息:
cd .tox; rm -rf py27
python -m virtualenv --python /opt/python/2.7/13rc1/bin/python py27
从该日志中您可以看到它使用pip
的最新(缓存)版本。正常安装会为您提供最新的pip
版本,因此无需清除/更新pip
缓存。