如何比较Python中的版本号?

如何比较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..有没有一种比较版本字符串的优雅方法?


回首忆惘然
浏览 870回答 2
2回答

largeQ

setuptools定义parse_version()..这个工具Pep 0440-版本识别并且还能够解析不遵循PEP的版本。此函数由easy_install和pip若要处理版本比较,请执行以下操作。从博士:解析了PEP 440定义的项目版本字符串。返回的值将是一个表示版本的对象。这些对象可以相互比较和排序。排序算法是由PEP 440定义的,另外,任何不是有效PEP 440版本的版本都将被认为小于任何有效的PEP 440版本,无效版本将继续使用原始算法进行排序。引用的“原始算法”是在PEP 440存在之前在旧版本的docs中定义的。在语义上,这种格式是distutils‘StrictVersion和LooseVersion类;如果您提供的版本将与StrictVersion然后他们会用同样的方式进行比较。否则,比较更像是一种“更聪明”的LooseVersion..可以创建病态版本编码方案来欺骗这个解析器,但是在实践中它们应该是非常罕见的。这个文献资料提供一些示例:如果您想确定所选的编号方案按照您认为的方式工作,则可以使用pkg_resources.parse_version()函数来比较不同的版本号:>>>&nbsp;from&nbsp;pkg_resources&nbsp;import&nbsp;parse_version>>>&nbsp;parse_version('1.9.a.dev')&nbsp;==&nbsp;parse_version('1.9a0dev')True>>>&nbsp;parse_version('2.1-rc2')&nbsp;<&nbsp;parse_version('2.1')True>>>&nbsp;parse_version('0.6a9dev-r41475')&nbsp;<&nbsp;parse_version('0.6a9')True如果不使用setuptools,则包装项目将此功能和其他与打包相关的功能拆分到一个单独的库中。from&nbsp;packaging&nbsp;import&nbsp;version version.parse('1.0.3.dev')from&nbsp;pkg_resources&nbsp;import&nbsp;parse_version parse_version('1.0.3.dev')

BIG阳

将版本字符串转换为元组并从那里开始有什么问题?对我来说很优雅>>> (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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python