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

Posted

技术标签:

【中文标题】Tox 将错误版本的 pip 安装到它的虚拟环境中【英文标题】:Tox installs the wrong version of pip to it's virtual env 【发布时间】:2016-11-02 21:11:44 【问题描述】:

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

我在我的 tox.ini 文件中包含了 8.0.3 版本的 pip 以获取依赖项。

deps=
    pip==8.0.3

但是,当我跑步时

source .tox/py27/bin/activate

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

pip --version

我结束了

8.1.2

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

8.0.3

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

编辑:补充一点,似乎我能够获取依赖项 pip==8.0.3,但对于其他依赖项,它们仍然从使用 pip==8.1.2 启动的命令运行

所以,我需要能够先抓取 pip==8.0.3,然后在安装后抓取其他所有内容。仍然不确定为什么 tox 以 pip==8.1.2 开头

【问题讨论】:

【参考方案1】:

这显然是“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

【讨论】:

我发现卸载现有的 virtualenv 很重要,因为 pip 捆绑在 virtualenv_support 包中,它不会随着 virtualenv 的更新而更新【参考方案2】:

这里有一个解决方法:https://github.com/pypa/pip/issues/3666

虽然为了让它工作,我不得不在我的脚本中编写“pip install pip==8.1.1”。回顾一下:

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

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

添加到您的 tox.ini:

install_command = toxinidir/pip.sh opts packages

【讨论】:

【参考方案3】:

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

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

【讨论】:

感谢您的回复。老实说,我不记得了,已经很久了。【参考方案4】:

virtualenv 的新版本可以下载最新的 pipsetuptoolswheel -- 您可以在通过 tox 运行时使用 tox-virtualenv-no-download 包禁用此行为参见:@987654321 @

【讨论】:

以上是关于Tox 将错误版本的 pip 安装到它的虚拟环境中的主要内容,如果未能解决你的问题,请参考以下文章

虚拟环境之间批量pip安装包迁移

tox python项目虚拟环境管理自动化测试&&构建工具

在Anaconda虚拟环境中pip安装的包无法使用

使用 Pip 将软件包安装到 Anaconda 环境

pip命令及虚拟环境的建立

Python 虚拟环境和pip相关使用总结