使用packaging.version.parse
.
>>> from packaging import version
>>> version.parse("2.3.1") < version.parse("10.1.2")
True
>>> version.parse("1.3.a4") < version.parse("10.1.2")
True
>>> isinstance(version.parse("1.3.a4"), version.Version)
True
>>> isinstance(version.parse("1.3.xy123"), version.LegacyVersion)
True
>>> version.Version("1.3.xy123")
Traceback (most recent call last):
...
packaging.version.InvalidVersion: Invalid version: '1.3.xy123'
packaging.version.parse
是一个第三方实用程序,但由setuptools使用(因此您可能已经安装了它),并且符合当前的PEP 440;如果版本兼容,它将返回packaging.version.Version
,如果不兼容,它将返回packaging.version.LegacyVersion
.后者将始终排在有效版本之前.
Note:包装最近达到了vendored into setuptools种.
你可能会遇到的一个古老的now deprecated种方法是distutils.version
,它没有文档记录,只符合被取代的PEP 386;
>>> from distutils.version import LooseVersion, StrictVersion
>>> LooseVersion("2.3.1") < LooseVersion("10.1.2")
True
>>> StrictVersion("2.3.1") < StrictVersion("10.1.2")
True
>>> StrictVersion("1.3.a4")
Traceback (most recent call last):
...
ValueError: invalid version number '1.3.a4'
正如您所见,它将有效的PEP440版本视为"不严格",因此与现代Python的有效版本概念不符.
由于distutils.version
是未记录的,所以here是相关的文档字符串.