【发布时间】:2020-09-05 01:39:02
【问题描述】:
我正在尝试查找是否有办法获取已安装的软件包和版本并检查它是否满足要求规范。
例如,如果我有包 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
我发现 pkg_resources.extern.packaging 有 version.parse,这对于比较大于或小于的不同版本很有用,但需求规范可能非常复杂,并且有像 ~= 这样的运算符不是标准的数学运算符.
setuptools 文档有这个例子:
PickyThing<1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1
有没有现成的方法来做这个检查,或者我自己做一个简单的方法?
编辑: ~= 尤其困难,尤其是当规范作为变量输入时。 * 在版本要求中也很难弄清楚,因为
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
【问题讨论】:
标签: python pip python-packaging requirements.txt