假设您已经发布了两个预发行版:
package 0.0.1.dev0
package 0.0.2.dev0
My install_requires
部分在setup.py
states:
[
'package>=0.0.2,<1.0.0'
]
现在,当我跑步时pip install . --upgrade --pre
我收到错误:
错误:找不到满足要求的版本包=0.0.2(来自版本:0.0.1.dev0、0.0.2.dev0)
错误:找不到包 =0.0.2 的匹配发行版
我究竟做错了什么?难道不是--pre
flag 应该告诉 pip 匹配预发布版本吗?
Summary
The pip --pre
选项指示 pip 包含潜在匹配的预发布版本和开发版本,但它不会更改版本匹配的语义。
自预发布以来0.0.2.dev0
早于稳定版本0.0.2
,pip 在搜索至少与稳定版本一样新的包时正确报告错误0.0.2
.
解释
混乱的关键点在点周围--pre
选项,记录为:
--pre
包括预发布版本和开发版本。默认情况下,pip 只查找稳定版本。
问题的前提是--pre
选项应该更改包版本匹配语义,以便在与稳定版本匹配时忽略预发布版本后缀。
为了进一步澄清,请考虑兼容的发布运算符~=
。 PEP 440 部分兼容版本 https://www.python.org/dev/peps/pep-0440/#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.*
这个例子清楚地表明suffix被忽略。
以下要求不符合0.0.2.dev0
:
install_requires=['package~=0.0.2'] # ERROR: ResolutionImpossible
而这个例子does匹配稳定版本0.0.2
:
install_requires=['package~=0.0.2.dev0'] # OK - suffix ignored
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)