[Distutils] PEP 345 update + RFC on "Requires-External" and "Requires-Python"

Tarek Ziadé ziade.tarek at gmail.com
Tue Nov 17 14:51:39 CET 2009

On Sun, Nov 15, 2009 at 7:18 AM, Kevin Teague <kevin at bud.ca> wrote:
> Erm, actually, re-reading the Requires Python section in PEP 345 I guess the
> conditional operator is required, so it would actually be:
> Requires Python: ==2.4, ==2.5, ==2.6
> Is that right? Perhaps in the absence of a conditional operator, then ==
> should be the default, since I think it'd be easy to misunderstand this
> field upon casual usage.

That's a multi-line field, so at the end, Distutils will return a list
with the value of all lines.

For "==" I guess we can specify in the field that it's the default
operator, I'll add that.

> But then it should also make explicit in the PEP
> that ==2.5 is taken to mean only 2.5.0 or the entire sereis of releases in
> the 2.5 line.

I think that ==2.5 should target the entire 2.5.x series.

> But then arguably there aren't even enough special cases to justify the
> extra syntax to support things such as ">= 2.5.2"? I would imagine that
> almost all packages, when they release just test against the latest releases
> of whatever versions of Python that project supports? Also for the minor
> releases the other Python implementations, they aren't lock step with the
> CPython minor releases are they? e.g. Jython has a 2.5.0 release and 2.5.1
> release, but that 2.5.1 isn't the same as CPython 2.5.1 (I could be wrong
> about this, haven't looked in depth).

Answering to Frank here too:

We can suppose that a program that works with Jython, can safely use jython
versions in Requires-Python,

unless it's possible for a given program to run on CPython *and* Jython
and that it's impossible to use a common MAJOR.MINOR version ?

> Finally, it actually only makes sense to tag specific distributions for
> which versions of Python they support. So for example the Grok project:
> Grok 1.0:
>  Requires Python: 2.4, 2.5
> Grok 1.1:
>  Requires Python: 2.5, 2.6
> Which means that they PyPI would say "Grok supports Python 2.5 and Python
> 2.6" after 1.1 is released. Which might not be true if there was still
> maintenance releases happening in the 1.0.x line. So they what should the
> project specify here?
> So maybe I'm -0 on this field, since it does seems ambigous or the
> information is specific to the distributions and not the overall project.

I am not sure why you say there's an ambiguity, because PyPI doesn't
give the metadata
of a project, but of a distribution. (and as a matter of fact, some
PyPI UIs will automatically
use the latest distribution of the project, but that's just a default behavior)

So the "Grok supports Python 2.5 and Python 2.6" sentence doesn't
exists anywhere.
It's "Grok 1.1 supports Python 2.5 and Python 2.6"
"Grok LATEST_VERSION supports Python 2.5 and Python 2.6"


More information about the Distutils-SIG mailing list