[Python-Dev] PEP 396, Module Version Numbers (original) (raw)

Michael Foord fuzzyman at voidspace.org.uk
Thu Apr 7 14:22:24 CEST 2011


On 07/04/2011 12:59, Nick Coghlan wrote:

On Thu, Apr 7, 2011 at 9:10 PM, Michael Foord<fuzzyman at voidspace.org.uk> wrote:

I really dislike this way of specifying the version. For a start it is really ugly.

More importantly it means the version information is only available if the package has been installed by "packaging", and so isn't available for the parts of my pre-build process like building the documentation (which import the version number to put into the docs). Currently all my packages have the canonical version number information in the package itself using: version = '1.2.3' Anything that needs the version number, including setup.py for upload to pypi, has one place to look for it and it doesn't depend on any other tools or processes. If switching to "packaging" prevents me from doing this then it will inhibit me using "packaging". What I may have to do is use a python script that will generate the static metadata, which is not such a bad thing I guess as it will only need to be executed at package build time. I won't be switching to that horrible technique for specifying versions within my packages though. It sounds like part of the PEP needs another trip through distutils-sig. An informational PEP really shouldn't be advocating standard library changes, but it would make sense for this point of view to inform any updates to PEP 386 (the version handling standardisation PEP). As I see it, there appear to be two main requests: 1. Normalised version parsing and comparison should be available even if packaging itself is not installed (e.g. as part of pkgutil) 2. packaging should support extraction of the version metadata from the source files when bundling a package for distribution On point 2, rather than requiring that it be explicitly requested, I would suggest the following semantics for determining the version when bundling a package ready for distribution: - if present in the metadata, use that - if not present in the metadata, look for version in the module source code (or the init source code for an actual package) - otherwise warn the developer that no version information has been provided so it is automatically being set to "0.0.0a0" This sounds good to me.

As an added consideration the suggested technique may not work for tools like py2exe / py2app, embedded python and alternative implementations - which may not have the full "pacakging" machinery available.

All the best,

Michael Foord

Cheers, Nick.

-- http://www.voidspace.org.uk/

May you do good and not evil May you find forgiveness for yourself and forgive others May you share freely, never taking more than you give. -- the sqlite blessing http://www.sqlite.org/different.html



More information about the Python-Dev mailing list