[Distutils] Draft PEP for JSON based metadata published

Nick Coghlan ncoghlan at gmail.com
Wed May 29 03:14:51 CEST 2013


On Tue, May 28, 2013 at 7:28 AM, Donald Stufft <donald at stufft.io> wrote:
> On May 27, 2013, at 10:44 AM, Ronald Oussoren <ronaldoussoren at mac.com>
> wrote:
> The versioning spec mentions that distribution tools may refuse to publish
> distributions that pin the versions of dependencies. I understand why this
> is needed, and agree in general, but have a usecase that I don't know how to
> express without pinning.
>
> In particular, PyObjC consists of a number of distributions (pyobjc-core,
> pyobjc-framework-Cocoa, ...) and an umbrella package (pyobjc) what depends
> on the various distributions to make it easier to install all of PyObjC. The
> umbrella package currently pins the versions of subpackages to ensure that
> "pip install pyobjc==2.5.1" installs exactly that version of the entire
> project.  When I'd use the "compatible release" specifier I can no longer
> easily ensure that users can install an exact version of the entire project,
> other than by hacking the system: specify a compatible version with an
> additional level that isn't used by the project (for example ~=2.5.2.0).
> What is the correct way to create an umberella project without getting
> yelled at by distribution tools?
>
>
> It's unlikely PyPI will get more than a warning for ``==``, `is` comparisons
> might be disallowed? Not sure.

I think Ronald's example of publishing metadistributions that pin
particular versions of subdistributions is a valid one (I do exactly
the same thing myself with RPM, it just didn't occur to me as a use
case while updating the PEPs), so I need to reconsider some of the
index server restrictions currently proposed in the PEPs.

However, I'd also still like to not-so-gently steer users away from
overly restrictive dependencies in the general case.

This is a case where in a *technical* sense there's no difference
between "We are making these distributions we maintain easier to
install all at once" and "Our distribution needs a compatible version
of this other distribution in order to work", but *semantically*
they're two quite different operations.

So, what do people think of the idea of a new top level "distributes"
field? Syntax identical to "requires", but *semantically*
distinguished in that version pinning in "distributes" would be not
only allowed, but encouraged. A metapackage like PyObjC would then
have just entries in the "distributes" field, and no direct
dependencies of its own.

Thoughts?

Cheers,
Nick.

--
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia


More information about the Distutils-SIG mailing list