小编Fut*_*get的帖子

有没有办法以编程方式确认 python 包版本满足需求说明符?

我正在尝试寻找是否有办法获取已安装的软件包和版本并检查它是否满足要求规范。

例如,如果我有包 pip==20.0.2,我希望程序执行以下操作:

CheckReqSpec("pip==20.0.2", "pip>=19.0.0")  -> True
CheckReqSpec("pip==20.0.2", "pip<=20.1")    -> True
CheckReqSpec("pip==20.0.2", "pip~=20.0.0")  -> True
CheckReqSpec("pip==20.0.2", "pip>20.0.2")   -> False
Run Code Online (Sandbox Code Playgroud)

我发现 pkg_resources.extern.packaging 有 version.parse,这对于比较大于或小于的不同版本很有用,但要求规范可能非常复杂,并且有像 ~= 这样的运算符不是标准数学运算符。

setuptools 文档有这个例子:

PickyThing<1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1
Run Code Online (Sandbox Code Playgroud)

是否有现有的方法可以进行此检查,或者有一种简单的方法可以让我自己进行检查?

编辑: ~= 特别困难,特别是当规格作为变量输入时。* 版本要求也很难弄清楚,因为

 version.parse("20.0.*") == version.parse("20.0.1") # False
 version.parse("20.0.*") < version.parse("20.0.0")  # True 
 version.parse("20.0.*") < version.parse("20.1.1")  # True 
 version.parse("20.0.*") >= version.parse("20.0.0") # False
Run Code Online (Sandbox Code Playgroud)

python pip requirements.txt python-packaging

10
推荐指数
1
解决办法
934
查看次数

标签 统计

pip ×1

python ×1

python-packaging ×1

requirements.txt ×1