2014-02-12 141 views
10

我有一个支持python 2.4,2.6和2.7的编译框。这会导致按照自己的python安装要求安装各种版本的点。我使用tox通过setup.py运行测试。当安装了多个版本的python时,tox使用错误版本的pip

每当我运行{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) 


[[email protected] .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是1.5.2 Python解释器点子。这在运行测试时会导致错误,因为它使用pip来安装目录,并且其中一些来自外部源,并且在1.5.2中我们需要明确地设置--allow-external --allow-uniserified标志,用于其中一个模块在1.4.1中不存在,每当我通过tox调用测试时都会导致错误。

只有一个python2.7安装,它是从源代码安装的。但我认为它运行点1.4.1,但现在升级到1.5.2。如何毒素可以使用旧版本?是否有任何.pth文件或可能遗留下来的需要清理的文件?

我可以放下tox并直接运行pytests,但我更愿意通过tox运行它们。
请让我知道如果你想看到日志,我可以用日志更新问题。

+0

您是否找到解决方案?我也有同样的问题。 – Vetalll

+0

不,我因为缺乏时间研究而放弃了怯懦! – opensourcegeek

回答

-1

使用此方法:创建在同一水平作为你的setup.py一个tox.ini文件,并用它来告诉TOX版本运行的,就像here

+1

这不回答问题。这不是所寻求的Python版本,而是pip版本。 – Sardathrion

1

tox创造了一个.tox/py27 virtualenv中,.tox/py35等视在你测试的python版本上(即根据你的envlisttox.ini或参数-e选项)。 tox然后将pip安装到此virtualenv以及您的软件包以及您的软件包所依赖的所有软件包中。

在进一步运行中,为了节省时间,virtualenv将被重用,并且只有您的软件包被重新安装(并且可能的依赖关系已更新)。你pip会留在原来的版本,除非你做:

./tox/py27/bin/pip install -U pip 

或重新初始化完整的virtualenv:

tox -r -e py27 

(或tox -r所有.tox virtualenvs所有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的缓存。