【问题标题】:tox uses wrong version of pip when multiple versions of python are installed安装多个版本的python时,tox使用错误版本的pip
【发布时间】:2014-02-12 14:21:09
【问题描述】:

我有一个支持 python 2.4、2.6 和 2.7 的构建框。这导致在他们自己的 python 安装中安装各种版本的点子。我正在使用tox 通过setup.py 运行测试。

每当我运行{python2.7_installation_dir}/bin/python setup.py test 时,都会生成.tox 目录。在我运行的.tox 目录中

py27/bin/pip --version 
pip 1.4.1 from {my_package}/.tox/py27/lib/python2.7/site-packages (python 2.7)


[buildbot@BUILD-SERV-01 .tox]# python2.7 
Python 2.7.6 (default, Nov 20 2013, 15:33:09) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip
>>> pip.__version__
'1.5.2'

所以 .tox 目录中的 pip 版本是 1.4.1,而我用来执行 setup.py test 的 python 解释器安装的 pip 是 1.5.2。这会在运行测试时导致错误,因为它使用 pip 安装目录,其中一些来自外部源,在 1.5.2 中,我们需要为其中一个模块显式设置 --allow-external --allow-unverified 标志在 1.4.1 中不存在,这导致每次我通过 tox 调用测试时都会出错。

python2.7只有一个安装,而且是从源码安装的。但我认为它运行 pip 1.4.1,但现在已升级为使用 1.5.2。 tox怎么能用老版本?是否有任何 .pth 文件或可能遗留的需要清理的东西?

我可以删除 tox 并直接运行 pytests,但我更愿意通过 tox 运行它们。
如果您想查看日志,请告诉我,我可以使用日志更新问题。

【问题讨论】:

  • 您找到解决方案了吗?我也有同样的问题。
  • 不,由于没有时间研究,我怯懦地放弃了 tox!

标签: python version pip setup.py tox


【解决方案1】:

tox.tox/py27.tox/py35 等中创建一个virtualenv,具体取决于您测试的python 版本(即基于tox.ini 中的envlist-e 选项的参数)。 tox 然后将 pip 安装到这个 virtualenv、你的包和你的包所依赖的所有包中。

在进一步运行时,为了节省时间,virtualenv 会被重用,并且只会重新安装你的包(并且可能会更新依赖项)。除非您这样做,否则您的 pip 将保留原始版本:

./tox/py27/bin/pip install -U pip

或使用以下命令重新初始化完整的 virtualenv:

tox -r -e py27

(或tox -r 用于所有.tox virtualenvs 用于您的envlist 中的所有python 版本)。

如果您想进一步分析tox 是如何设置的,请先调用:

tox -r -e py27 -vv

从输出中您可以看到 recreate 步骤:

py27 recreate: /src/site-packages/your/package/.tox/py27
  removing /src/site-packages/your/package/.tox/py27
setting PATH=/src/site-packages/your/package/.tox/py27/bin:/opt/python/2.7/bin:........
  /src/site-packages/your/package/.tox$ python -m virtualenv --python /opt/python/2.7.13rc1/bin/python py27 >/src/site-packages/your/package/.tox/py27/log/py27-0.log

现在您转到 .tox 目录并重做 virtualenv 创建详细:

cd .tox; rm -rf py27
python -m virtualenv --python /opt/python/2.7/13rc1/bin/python py27

从该日志中,您会看到它使用了最新(缓存)版本的pip。由于您的正常安装会为您提供最新的pip 版本,因此无需清理/更新pip 的缓存。

【讨论】:

    【解决方案2】:

    使用这种方法:创建一个与 setup.py 相同级别的 tox.ini 文件,并使用它来告诉 tox 要运行哪些版本,例如 here

    【讨论】:

    • 这没有回答问题。寻找的不是 Python 版本,而是 pip 版本。
    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 2011-09-28
    • 2016-11-02
    • 1970-01-01
    • 2020-03-29
    • 2012-12-30
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多