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 的新版本可以下载最新的 pip
、setuptools
和 wheel
-- 您可以在通过 tox 运行时使用 tox-virtualenv-no-download 包禁用此行为参见:@987654321 @
【讨论】:
以上是关于Tox 将错误版本的 pip 安装到它的虚拟环境中的主要内容,如果未能解决你的问题,请参考以下文章