Tox将错误版本的pip安装到它的虚拟环境中

时间:2016-06-30 16:30:08

标签: python linux dependencies pip tox

我正在使用tox来管理一些测试环境。我有一个依赖(backports.ssl-match-hostname)我无法使用最新版本的pip下载,所以我需要恢复到pip 8.0.3以允许安装工作。

我在我的tox.ini文件中包含了8.0.3版本的pip for dependencies。

deps=
    pip==8.0.3

然而,当我跑

source .tox/py27/bin/activate

并进入虚拟测试环境,然后运行

pip --version

我最终得到了

8.1.2

但是,在我的tox环境之外,当我运行相同的命令时,我得到了

8.0.3

抓住点子时,tox有什么特别之处吗?为什么我无法指定要用作依赖项的pip版本?

编辑:添加到这里,似乎我能够获取依赖关系pip == 8.0.3,但对于其他依赖关系,它们仍然使用pip == 8.1.2 <启动的命令运行/ p>

所以,我需要首先抓住pip == 8.0.3,然后一旦安装,抓住其他所有东西。仍然不确定为什么tox以pip == 8.1.2

开头

4 个答案:

答案 0 :(得分:5)

这显然是“virtualenvs”python软件包的结果,它包含一个预先选择的python软件包组,其中一个是最新且最好的pip。

我不知道这是否是首选方式,但我通过运行

找到了成功
pip uninstall virtualenv

然后使用有效的版本重新安装

pip install virtualenv==15.0.1

使用virtualenv的“正确”版本,我能够运行我的tox命令

source .tox/py27/bin/activate

并查看所需的pip版本

pip --version
pip 8.0.3

答案 1 :(得分:4)

此处的解决方法如下:https://github.com/pypa/pip/issues/3666

虽然为了使它工作,我必须写&#34; pip install pip == 8.1.1&#34;在我的脚本中。所以回顾一下:

将pip.sh脚本添加到项目中:

#!/bin/bash
pip install pip==8.1.1
pip install "$@"

添加到您的tox.ini:

install_command = {toxinidir}/pip.sh {opts} {packages}

答案 2 :(得分:0)

我最近遇到了这个问题。我已经有一段时间了,但它没有注册,因为我偶尔会遇到Python 2/3代码的失败。另一种可能发生的方式是,如果像我一样,你改变不同Python版本之间的virtualenv并且不要清理。

检查/bin/Scripts,看看python2是否指向python。如果virtualenv是Python 3那么这将意味着python2实际上调用Python 3.反之亦然,当然,如果你的virtualenv是Python 2并且你想测试Python 3代码。

答案 3 :(得分:0)

新版本的virtualenv可以下载最新的pipsetuptoolswheel-您可以在使用tox-virtualenv-no-在tox中运行时禁用此行为下载程序包,请参阅:https://github.com/asottile/tox-virtualenv-no-download#wait-why