Tox 将错误版本的 pip 安装到它的虚拟环境中
Tox installs the wrong version of pip to it's virtual env
我正在使用 tox 来管理一些测试环境。我有一个无法使用最新版本的 pip 下载的依赖项 (backports.ssl-match-hostname),因此我需要恢复到 pip 8.0.3 才能让安装工作。
我已将 8.0.3 版本的 pip 包含在我的 tox.ini 文件中作为依赖项。
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,但对于其他依赖项,它们仍然 运行ning 来自使用以下命令启动的命令pip==8.1.2
所以,我需要首先能够获取 pip==8.0.3,然后在安装后获取其他所有内容。仍然不确定为什么 tox 以 pip==8.1.2
开头
这显然是 "virtualenvs" python 包的结果,其中包含它引用的一组预选的 python 包,其中一个是最新最好的 pip .
我不知道这是否是执行此操作的首选方法,但我通过 运行ning
找到了成功
pip uninstall virtualenv
然后使用有效的版本重新安装
pip install virtualenv==15.0.1
使用 "correct" 版本的 virtualenv,我能够 运行 我的 tox 命令
source .tox/py27/bin/activate
并查看所需的 pip 版本
pip --version
pip 8.0.3
这里有解决方法: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}
我最近遇到了这个问题。我已经有一段时间了,但它只是没有注册,因为我偶尔会遇到 Python 2/3 代码的失败。另一种可能发生这种情况的方式是,如果像我一样,您在不同 Python 版本之间更改 virtualenv 并且不清理。
检查 /bin
或 /Scripts
以查看 python2
是否指向 python
。如果 virtualenv 是 Python 3 那么这将意味着 python2
实际上调用 Python 3。反之亦然,当然,如果你的 virtualenv 是 Python 2 并且你想测试 Python 3 个代码。
新版本的 virtualenv 可以下载最新的 pip
、setuptools
和 wheel
-- 你可以在 运行 时通过 tox 禁用此行为tox-virtualenv-no-download 包见:https://github.com/asottile/tox-virtualenv-no-download#wait-why
我正在使用 tox 来管理一些测试环境。我有一个无法使用最新版本的 pip 下载的依赖项 (backports.ssl-match-hostname),因此我需要恢复到 pip 8.0.3 才能让安装工作。
我已将 8.0.3 版本的 pip 包含在我的 tox.ini 文件中作为依赖项。
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,但对于其他依赖项,它们仍然 运行ning 来自使用以下命令启动的命令pip==8.1.2
所以,我需要首先能够获取 pip==8.0.3,然后在安装后获取其他所有内容。仍然不确定为什么 tox 以 pip==8.1.2
开头这显然是 "virtualenvs" python 包的结果,其中包含它引用的一组预选的 python 包,其中一个是最新最好的 pip .
我不知道这是否是执行此操作的首选方法,但我通过 运行ning
找到了成功pip uninstall virtualenv
然后使用有效的版本重新安装
pip install virtualenv==15.0.1
使用 "correct" 版本的 virtualenv,我能够 运行 我的 tox 命令
source .tox/py27/bin/activate
并查看所需的 pip 版本
pip --version
pip 8.0.3
这里有解决方法: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}
我最近遇到了这个问题。我已经有一段时间了,但它只是没有注册,因为我偶尔会遇到 Python 2/3 代码的失败。另一种可能发生这种情况的方式是,如果像我一样,您在不同 Python 版本之间更改 virtualenv 并且不清理。
检查 /bin
或 /Scripts
以查看 python2
是否指向 python
。如果 virtualenv 是 Python 3 那么这将意味着 python2
实际上调用 Python 3。反之亦然,当然,如果你的 virtualenv 是 Python 2 并且你想测试 Python 3 个代码。
新版本的 virtualenv 可以下载最新的 pip
、setuptools
和 wheel
-- 你可以在 运行 时通过 tox 禁用此行为tox-virtualenv-no-download 包见:https://github.com/asottile/tox-virtualenv-no-download#wait-why