[Python-Dev] PEP 396, Module Version Numbers
Michael Foord
fuzzyman at voidspace.org.uk
Thu Apr 7 13:51:23 CEST 2011
On 07/04/2011 12:10, Michael Foord wrote:
> On 06/04/2011 15:26, Nick Coghlan wrote:
>> On Wed, Apr 6, 2011 at 6:22 AM, Glenn
>> Linderman<v+python at g.nevcal.com> wrote:
>>> With more standardization of versions, should the version module be
>>> promoted
>>> to stdlib directly?
>> When Tarek lands "packaging" (i.e. what distutils2 becomes in the
>> Python 3.3 stdlib), the standardised version handling will come with
>> it.
>>
>>> On 4/5/2011 11:52 AM, Barry Warsaw wrote:
>>>
>>> DEFAULT_VERSION_RE = re.compile(r'(?P<version>\d+\.\d(?:\.\d+)?)')
>>>
>>> __version__ = pkgutil.get_distribution('elle').metadata['version']
>>>
>
> 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).
>
And in fact it would make the module itself unimportable unless
installed by "packaging", so not compatible with other installation
methods (including the ever-loved 'just drop it somewhere on sys.path)
or earlier versions of Python that don't have the required apis (or
don't have packaging installed).
So I don't think recommending
"pkgutil.get_distribution('elle').metadata['version']" as a way for
packages to provide version information is good advice.
All the best,
Michael Foord
> 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.
>
> All the best,
>
> Michael
>>> The RE as given won't match alpha, beta, rc, dev, and post suffixes
>>> that are
>>> discussed in POP 386.
>> Indeed, I really don't like the RE suggestion - better to tell people
>> to just move the version info into the static config file and use
>> pkgutil to make it available as shown. That solves the build time vs
>> install time problem as well.
>>
>>> Nor will it match the code shown and quoted for the alternative
>>> distutils2
>>> case.
>>>
>>>
>>> Other comments:
>>>
>>> Are there issues for finding and loading multiple versions of the same
>>> module?
>> No, you simply can't do it. Python's import semantics are already
>> overly complicated even without opening that particular can of worms.
>>
>>> Should it be possible to determine a version before loading a
>>> module? If
>>> yes, the version module would have to be able to find a parse version
>>> strings in any of the many places this PEP suggests they could be...
>>> so that
>>> would be somewhat complex, but the complexity shouldn't be used to
>>> change
>>> the answer... but if the answer is yes, it might encourage fewer
>>> variant
>>> cases to be supported for acceptable version definition locations
>>> for this
>>> PEP.
>> Yep, this is why the version information should be in the setup.cfg
>> file, and hence available via pkgutil without loading the module
>> first.
>>
>> 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