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

问题描述 投票:0回答:6

在我正在使用的Python库的

requirements.txt
中,指定了如下要求之一:

mock-django~=0.6.10

~=
是什么意思?

python requirements.txt
6个回答
428
投票

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

或者,正如 PEP 440 所说:

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

>= V.N, == V.*


76
投票

除了现有的答案之外,我认为还提到这一点非常重要

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

以下也是正确的

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

PEP文档中提到过。


47
投票

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

它相当于:

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

如果您不确定所有这些版本号内容,快速查看 PEP440 版本方案 应该可以帮助您解决问题!


15
投票

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

兼容版本条款由兼容版本组成 运算符

~=
和版本标识符。它匹配任何候选版本 预计与指定版本兼容。

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

对于给定的发布标识符

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.*

请注意,这不适用于语义版本控制预版本。

例如,

2.3.4.dev123+abc
应该
> 2.3.3
< 2.3.4

但是

~=2.3.4.dev123+abc
发布后将 NOT 采取
2.3.4


14
投票

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


5
投票

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

您可以在此处阅读更多内容:https://www.python.org/dev/peps/pep-0440/#兼容-release

© www.soinside.com 2019 - 2024. All rights reserved.