我正在使用PEP440中建议的本地版本标签,我打包了2个版本:turicreate-6.2
和turicreate-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 这样做。