如何比较Python中的版本号?我正在浏览一个包含鸡蛋的目录,以便将这些鸡蛋添加到sys.path..如果目录中有两个版本相同的.EGG,我只想添加最新的版本。我有一个正则表达式r"^(?P<eggName>\w+)-(?P<eggVersion>[\d\.]+)-.+\.egg$若要从文件名中提取名称和版本,请执行以下操作。问题是比较版本号,它是一个字符串,类似2.3.1.因为我在比较字符串,在10上面有2种类型,但是对于版本来说这是不正确的。>>> "2.3.1" > "10.1.1"True我可以做一些拆分、解析、转换为int等等,最终我会找到一个解决办法。但这是Python不是Java..有没有一种比较版本字符串的优雅方法?
2 回答
largeQ
TA贡献2039条经验 获得超7个赞
parse_version()
easy_install
pip
解析了PEP 440定义的项目版本字符串。返回的值将是一个表示版本的对象。这些对象可以相互比较和排序。排序算法是由PEP 440定义的,另外,任何不是有效PEP 440版本的版本都将被认为小于任何有效的PEP 440版本,无效版本将继续使用原始算法进行排序。
在语义上,这种格式是distutils‘ StrictVersion
和 LooseVersion
类;如果您提供的版本将与 StrictVersion
然后他们会用同样的方式进行比较。否则,比较更像是一种“更聪明”的 LooseVersion
..可以创建病态版本编码方案来欺骗这个解析器,但是在实践中它们应该是非常罕见的。
如果您想确定所选的编号方案按照您认为的方式工作,则可以使用 pkg_resources.parse_version()
函数来比较不同的版本号: >>> from pkg_resources import parse_version>>> parse_version('1.9.a.dev') == parse_version('1.9a0dev')True>>> parse_version('2.1-rc2') < parse_version('2.1')True>>> parse_version('0.6a9dev-r41475') < parse_version('0.6a9')True
from packaging import version version.parse('1.0.3.dev')from pkg_resources import parse_version parse_version('1.0.3.dev')
BIG阳
TA贡献1859条经验 获得超6个赞
将版本字符串转换为元组并从那里开始有什么问题?对我来说很优雅
>>> (2,3,1) < (10,1,1)True>>> (2,3,1) < (10,1,1,1)True>>> (2,3,1,10) < (10,1,1,1)True>>> (10,3,1,10) < (10,1,1,1)False>>> (10,3,1,10) < (10,4,1,1)True
添加回答
举报
0/150
提交
取消