首页 > 解决方案 > python包版本与带有本地版本标签的版本

问题描述

我正在使用PEP440中建议的本地版本标签,并且我打包了 2 个版本:turicreate-6.2turicreate-6.2+minimal.

我首先安装 turicreate 6.2+minimal

$ pip install target/turicreate-6.2+minimal-cp36-cp36m-macosx_10_12_intel.macosx_10_12_x86_64.macosx_10_13_intel.macosx_10_13_x86_64.macosx_10_14_intel.macosx_10_14_x86_64.whl

然后我尝试安装 6.2,我希望 pip 可以卸载6.2+minimal,但它说

pip install turicreate==6.2
Requirement already satisfied: turicreate==6.2 in ./env36/lib/python3.6/site-packages (6.2+minimal)

我很困惑。它将版本6.2和本地版本(重新分发版本)6.2+minimal视为相同。但为什么?

如果我反转该过程,通过6.2先安装然后再安装6.2+minimal,pip 将6.2首先卸载。似乎 pip 对待这两个版本的方式不同。

$ pip install target/turicreate-6.2+minimal-cp36-cp36m-macosx_10_12_intel.macosx_10_12_x86_64.macosx_10_13_intel.macosx_10_13_x86_64.macosx_10_14_intel.macosx_10_14_x86_64.whl
Processing ./target/turicreate-6.2+minimal-cp36-cp36m-macosx_10_12_intel.macosx_10_12_x86_64.macosx_10_13_intel.macosx_10_13_x86_64.macosx_10_14_intel.macosx_10_14_x86_64.whl
...
Requirement already satisfied: chardet<4,>=3.0.2 in ./env36/lib/python3.6/site-packages (from requests>=2.9.1->turicreate==6.2+minimal) (3.0.4)
Installing collected packages: turicreate
  Attempting uninstall: turicreate
    Found existing installation: turicreate 6.2
    Uninstalling turicreate-6.2:
      Successfully uninstalled turicreate-6.2
Successfully installed turicreate-6.2+minimal

标签: pythonpip

解决方案


PEP 0440声明如下:

Except where specifically noted below, local version identifiers MUST NOT be permitted in version specifiers, and local version labels MUST be ignored entirely when checking if candidate versions match a given version specifier.

在您的情况下,这意味着您要 install 6.2, pip 发现 existing 6.2+minimal,本地部分+minimal被忽略,因为它应该是这样的,所以 pip 很高兴它不需要做任何事情。你不快乐,因为那不是你想要的,虽然......

反过来说,我的猜测是你指定了一个特定的(本地)版本,它6.2不匹配,所以 pip 做到了。


推荐阅读