在requirements.txt中,波浪号等于(~=)是什么意思?

在我正在使用的Python库的requirements.txt中,其中一个需求如下所示:

mock-django~=0.6.10

~=是什么意思?

99195 次浏览

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

或者,正如PEP 440所言:

对于给定的发布标识符V.N,兼容的发布子句大约等价于一对比较子句:

>= V.N, == V.*

  • PEP 440中的定义
  • < a href = " https://pip.pypa。 . io/en/stable/cli/pip_install/#require -specifiers" rel="noreferrer">完整的示例在文档中

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

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

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

它等价于:mock-django >= 0.6.10, == 0.6.*,是一种匹配期望兼容的版本的简洁方式。说白了,这有点像在说:“我需要一个mock-django的版本,它至少要像0.6.10一样新,但又不能新到与它不兼容。”

如果你不确定所有这些版本号的东西,快速看一下PEP440 版本计划应该整理你!

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

除了现有的答案,我认为还有一点非常重要,那就是

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

以下也是正确的

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

它在PEP文档中提到。

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

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

指定的版本标识符必须为标准格式 在版本计划中描述。本地版本标识符不是

.在此版本说明符中允许 对于给定的发布标识符V.N,兼容的发布子句为 近似等价于一对比较子句:

>= V.N, == V.*

此操作符绝对不能与单个段版本号一起使用,例如~=1

例如,以下两组版本子句是等价的:

~= 2.2
>= 2.2, == 2.*


~= 1.4.5
>= 1.4.5, == 1.4.*

如果在a中命名了预发布、后发布或开发发布 compatible release子句为V.N.suffix,则该后缀将被忽略 当确定所需的前缀匹配时:

~= 2.2.post3
>= 2.2.post3, == 2.*


~= 1.4.5a4
>= 1.4.5a4, == 1.4.*

发布段比较的填充规则意味着 兼容发布子句中假定的向前兼容程度 是否可以通过向版本附加额外的零来控制 说明符:< / p >

~= 2.2.0
>= 2.2.0, == 2.2.*


~= 1.4.5.0
>= 1.4.5.0, == 1.4.5.*