The distutils
module is going to be deprecated in Python 3.10, and to be removed in Python 3.12.
Hence, my current standard way of comparing version number strings is using pkg_resources
module (part of setuptools
):
>>> from pkg_resources import parse_version as version >>> version("1.0") <Version('1.0')> >>> version("1.8.9") < version("2.0") True >>> version("2.0.9") < version("2.1") True >>> version("2.1-beta") <Version('2.1b0')> >>> version("2.1-beta") < version("2.1") True >>> version("1.markku.2") <LegacyVersion('1.markku.2')> >>> version("1.markku.1") < version("1.markku.2") True >>>
I don’t exactly know when the parse_version()
function (or the pkg_resources
module) was introduced in setuptools
, but I’ve tested my usual Linux distros and their bundled setuptools
packages (which, by default, are among the oldest that you can find…), and this worked just fine. And in many cases setuptools
is upgraded anyway when creating new virtual environments.
See also: PEP 440 — Version Identification and Dependency Specification