我正在使用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
开头答案 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可以下载最新的pip
,setuptools
和wheel
-您可以在使用tox-virtualenv-no-在tox中运行时禁用此行为下载程序包,请参阅:https://github.com/asottile/tox-virtualenv-no-download#wait-why