Or Changing the Version Comparison Module in Distutils (again)<div><br></div><div>We've discussed a bit on distutils-sig about allowing <a href="http://semver.org/">http://semver.org/</a> versions in Python packages. Ronald's suggestion to replace - with ~ as a filename parts separator made me think of it again, because semver also uses the popular - character.</div>
<div><br></div><div>The gist of semver:</div><div><br></div><div>Major.Minor.Patch (always 3 numbers)</div><div><br></div><div>1.0.0-prerelease.version</div><div>1.0.0+postrelease.version</div><div>1.0.0-pre+post</div><div>
<br></div><div>And the big feature: no non-lexicographical sorting.</div><div><br></div><div>Right now, setuptools replaces every run of non-alphanumeric characters in versions (and in project names) to a single dash (-). This would have to change to at least allow +, and the regexp for recognizing an installed dist would have to allow the plus as well. Current setuptools handling:</div>
<div><br></div><div>def safe_version(version):</div><div><div>    version = version.replace(' ','.')</div><div>    return re.sub('[^A-Za-z0-9.]+', '-', version)</div></div><div><br></div><div>
<br></div><div>Semver would be an upgrade from the existing conventions because it is easy to remember (no special-case sorting for forgettable words 'dev' and 'post'), because you can legally put Mercurial revision numbers in your package's pre- or post- version, and because the meaning of Major, Minor, Patch is defined. For compatibility I think it would be enough to say you could not mix semver and PEP-386 in the same major.minor.patch release.</div>
<div><br></div><div>Vinay Sajip's distlib has some experimental support for semver.</div>