208

requirements.txt我正在使用的 Python 库中,其中一个要求被指定为:

mock-django~=0.6.10

是什么~=意思?

4

6 回答 6

237

这意味着它将选择最新版本的包,大于或等于0.6.10,但仍然是0.6.*版本,因此不会下载例如0.7.0。如果包维护者尊重语义版本控制(这表明重大更改应仅在主要版本中发生),它可确保您获得安全修复但保持向后兼容性。

或者,正如 PEP 440 所说:

对于给定的发布标识符 VN ,兼容的发布子句大致等价于一对比较子句:

>= V.N, == V.*

于 2016-09-20T09:21:53.923 回答
30

那是“兼容版本”版本说明符

它相当于: mock-django >= 0.6.10, == 0.6.*, 并且是匹配预期兼容的版本的一种简洁方式。用简单的英语来说,这有点像说:“我需要一个至少和 0.6.10 一样新的 mock-django 版本,但又不是新到不兼容的程度。”

如果你不确定所有这些版本号的东西,快速浏览一下 PEP440版本方案应该会让你明白!

于 2016-09-20T09:26:57.267 回答
16

除了现有的答案之外,我认为还需要提及的是,虽然

~=0.6.10 表示 >=0.6.10,==0.6.*

以下也是正确的

~=0.6 表示 >=0.6,==0.*

PEP 文档中提到了它。

于 2021-05-03T19:20:02.247 回答
9

~= 表示兼容版本。不低于 0.6.10 或更高 (0.6.*)。

于 2016-09-20T09:27:48.007 回答
4

兼容的发布子句由兼容的发布运算符 ~= 和版本标识符组成。它匹配预期与指定版本兼容的任何候选版本。

你可以在这里阅读更多:https ://www.python.org/dev/peps/pep-0440/#compatible-release

于 2016-09-20T09:23:10.440 回答
2

~= 兼容发布(包括发布前和发布后)的完整定义是:

兼容发布子句由兼容发布操作符~=和版本标识符组成。它匹配预期与指定版本兼容的任何候选版本。

指定的版本标识符必须采用版本方案中描述的标准格式。此版本说明符中不允许使用本地版本标识符。

对于给定的 release identifier V.N,兼容的 release 子句大致等价于一对比较子句:

>= 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.*
于 2022-01-26T16:28:32.467 回答