Problems with Python __version__ parsing
As stated by Armin and commenters [*] the change from 0.9 to 0.10 is a convention in open source versioning, and the fault seems to lie more on the version-parsers than the version-suppliers. [†] Armin also notes that the appropriate solution is to use:
from pkg_resources import parse_version
Despite it not being the fault of the version supplier, we've recognized that this can be an issue and can certainly take precautions against letting client code interpret __version__ as a float. Right now there are two ways that I can think of doing this:
Keep __version__ as a tuple. If you keep __version__ in tuple form you don't need to worry about client code forgetting to use the parse_version method.
Use version numbers with more than one decimal. This prohibits the version from being parsed as a float because it's not the correct format — taking the current Linux kernel version as an example:
>>> __version__ = '2.6.26' >>> float(__version__) Traceback (most recent call last): ... ValueError: invalid literal for float(): 2.6.26 >>> tuple(int(i) for i in __version__.split('.')) (2, 6, 26)
This ensures that the client code will think about a more appropriate way to parse the version number than using the float builtin; however, it doesn't prevent people from performing an inappropriate string comparison like the tuple does.
Which seems to invalidate the implied conclusion of my title How not to do software version numbers, which I now realize was stupidly named.