想象一下您已经发布了两个预发行版:
package 0.0.1.dev0
package 0.0.2.dev0
我在install_requires
的{{1}}部分中指出:
setup.py
现在,当我运行[
'package>=0.0.2,<1.0.0'
]
时出现错误:
错误:找不到满足要求包<1.0.0,> = 0.0.2的版本(来自版本:0.0.1.dev0、0.0.2.dev0) 错误:找不到软件包<1.0.0,> = 0.0.2
的匹配分布
我在做什么错? pip install . --upgrade --pre
标志不是应该告诉pip匹配预发行版本吗?
答案 0 :(得分:2)
pip --pre
选项指示pip包括潜在的匹配预发行版本和开发版本,但不会更改版本匹配的语义。
由于预发行版0.0.2.dev0
比稳定发行版0.0.2
要早,因此pip在搜索至少与稳定发行版0.0.2
一样新的软件包时会正确报告错误。
混淆的重点是点--pre
选项,该选项记录为:
--pre
包括预发行和开发版本。默认情况下,pip仅查找稳定版本。
问题的前提是--pre
选项应更改程序包版本匹配的语义,以便在与稳定版本匹配时将忽略预发行版本后缀。
要进一步说明,请考虑兼容的发布运营商 ~=
。 PEP 440第Compatible release节的部分内容为:
对于给定的发布标识符
V.N
,兼容的发布子句大约等于一对比较子句:
>= V.N, == V.*
...
如果在兼容的发布子句中将发布前,发布后或开发中的发布命名为
V.N.suffix
,则在确定所需的前缀匹配项时将忽略后缀:〜= 2.2.post3 = 2.2.post3,== 2。*
〜= 1.4.5a4 = 1.4.5a4,== 1.4。*
此示例清楚地显示了后缀被忽略。
以下要求与0.0.2.dev0
不匹配:
install_requires=['package~=0.0.2'] # ERROR: ResolutionImpossible
此示例确实与稳定版本0.0.2
相匹配:
install_requires=['package~=0.0.2.dev0'] # OK - suffix ignored