Case with some edge cases: ``` $ opam show --color never --normalise --root $PWD -f all-versions opam-state 2.0~alpha5 2.0.0~beta 2.0.0~beta3 2.0.0~beta3.1 2.0.0~beta5 2.0.0~rc 2.0.0~rc2 2.0.0~rc3 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0~beta2 2.1.0~beta4 2.1.0~rc 2.1.0~rc2 2.1.0 ``` The default python ordering does not work as is, due to the ~ most likely [1]: ``` In [1]: versions = ["2.0~alpha5", ...: "2.0.0~beta", ...: "2.0.0~beta3", ...: "2.0.0~beta3.1", ...: "2.0.0~beta5", ...: "2.0.0~rc", ...: "2.0.0~rc2", ...: "2.0.0~rc3", ...: "2.0.0", ...: "2.0.1", ...: "2.0.2", ...: "2.0.3", ...: "2.0.4", ...: "2.0.5", ...: "2.0.6", ...: "2.0.7", ...: "2.0.8", ...: "2.0.9", ...: "2.1.0~beta2", ...: "2.1.0~beta4", ...: "2.1.0~rc", ...: "2.1.0~rc2", ...: "2.1.0"] In [2]: versions2 = versions.copy() In [3]: versions2.sort() In [5]: versions2 == versions # ------------> default ordering says no Out[5]: False In [12]: from packaging.version import Version, parse In [13]: parse("2.0~alpha5") Out[13]: In [14]: versions2 = sorted(versions, key=parse) In [24]: versions2 Out[24]: ['2.0~alpha5', '2.0.0~beta', '2.0.0~beta3', '2.0.0~beta3.1', '2.0.0~beta5', '2.0.0~rc', '2.0.0~rc2', '2.0.0~rc3', '2.1.0~beta2', '2.1.0~beta4', '2.1.0~rc', '2.1.0~rc2', '2.0.0', '2.0.1', '2.0.2', '2.0.3', '2.0.4', '2.0.5', '2.0.6', '2.0.7', '2.0.8', '2.0.9', '2.1.0'] In [25]: versions2 == versions # ----> another tryout fails to compare as well Out[25]: False ``` [1] https://github.com/ocaml/opam/blob/master/src/core/opamVersionCompare.ml#L58-L61