【发布时间】:2017-01-28 03:32:42
【问题描述】:
在我正在使用的 Python 库的 requirements.txt 中,指定了以下要求之一:
mock-django~=0.6.10
~= 是什么意思?
【问题讨论】:
在我正在使用的 Python 库的 requirements.txt 中,指定了以下要求之一:
mock-django~=0.6.10
~= 是什么意思?
【问题讨论】:
~=Compatible release(包括发布前和发布后)的完整定义是:
兼容的版本条款由兼容的版本组成 运算符
~=和版本标识符。它匹配任何候选版本 预计与指定版本兼容。指定的版本标识符必须是标准格式 在Version scheme 中描述。本地版本标识符不是 此版本说明符中允许。
对于给定的发布标识符
V.N,兼容的发布条款是 大约相当于一对比较子句:
>= V.N, == V.*
此运算符不得与单个段版本号(例如
~=1)一起使用。例如,以下几组版本子句是等价的:
~= 2.2
>= 2.2, == 2.*
~= 1.4.5
>= 1.4.5, == 1.4.*
如果预发布、发布后或开发版本以 兼容释放条款为
V.N.suffix,则后缀被忽略 在确定所需的前缀匹配时:
~= 2.2.post3
>= 2.2.post3, == 2.*
~= 1.4.5a4
>= 1.4.5a4, == 1.4.*
释放段比较的填充规则意味着 兼容发行条款中假定的前向兼容性程度 可以通过在版本中附加额外的零来控制 说明符:
~= 2.2.0
>= 2.2.0, == 2.2.*
~= 1.4.5.0
>= 1.4.5.0, == 1.4.5.*
【讨论】:
除了现有的答案之外,我认为还提到这一点非常重要
~=0.6.10 表示 >=0.6.10, ==0.6.*
以下也是正确的
~=0.6 表示 >=0.6,==0.*
PEP documentation中提到过。
【讨论】:
表示会选择最新版本的包,大于等于0.6.10,但还是0.6.*版本,所以不会下载0.7.0等。如果包维护者尊重语义版本控制(它规定重大更改只应在主要版本中发生),它可确保您获得安全修复但保持向后兼容性。
或者,正如 PEP 440 所说:
对于给定的发布标识符 V.N ,兼容的发布子句大致等价于一对比较子句:
>= V.N, == V.*
【讨论】:
这是“兼容版本”version specifier。
相当于:mock-django >= 0.6.10, == 0.6.*,是一种匹配预期兼容版本的简洁方式。用简单的英语来说,这有点像说:“我需要一个至少与 0.6.10 一样新的 mock-django 版本,但又不是太新以至于不兼容。”
如果您不确定所有这些版本号,请快速查看 PEP440 version scheme 应该可以解决您的问题!
【讨论】:
~= 表示兼容版本。不低于 0.6.10 及更高 (0.6.*)。
【讨论】:
兼容的发布子句由兼容的发布运算符 ~= 和版本标识符组成。它匹配任何预期与指定版本兼容的候选版本。
您可以在这里阅读更多内容:https://www.python.org/dev/peps/pep-0440/#compatible-release
【讨论】: