我试图找到一种方法来获取已安装的软件包和版本,并检查其是否满足要求规范。
例如,如果我有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