Python PIP 中的 ~= 兼容版本含义

142 阅读1分钟

~= 含义

在一些 PIP 文件中我们经常看到兼容版本操作符 ~=

对于给定的发布标识符 V.N ,他的含义如下:

>= V.N, == V.*

示例

例如,以下版本是等价的:

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

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

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

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

如何验证

# 使用 Python 验证版本约束
from packaging import version, specifiers

spec = specifiers.SpecifierSet("~=5.2")
test_versions = ["5.2.0", "5.2.1", "5.2.7", "5.3.0", "5.5.3"]

for v in test_versions:
    print(f"{v}: {version.Version(v) in spec}")

调试技巧

依赖相关的命令

# 查看所有依赖 celery 的包
pip show celery
pipdeptree -r -p celery

# 检查是否有其他约束
pip check

# 查看 pip 如何解析版本 
pip debug --verbose 

# 检查可用版本 
pip index versions celery

使用 pip-tools 分析

pip install pip-tools

# 创建 requirements.in
echo "celery[redis]~=5.2" > requirements.in

# 编译并查看详细过程
pip-compile requirements.in --verbose