Python 包版本与具有本地版本标签的版本



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

我首先安装图里创建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

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.

在您的情况下,这意味着您要安装6.2,pip 找到现有的6.2+minimal+minimal的本地部分被忽略,因为这是它应该的方式,所以 pip 很高兴它不需要做一些事情。你不开心,因为这不是你想要的,不过...

反过来说,我的猜测是你正在指定一个特定的(本地(版本,6.2不匹配,所以 pip 这样做。

最新更新