[Distutils] [Fwd: Re: Annoucing distribute project]

Ian Bicking ianb at colorstudy.com
Fri Sep 26 21:34:08 CEST 2008

Phillip J. Eby wrote:
> In the case of the distutils, the people who are capable of extending it 
> are tired of doing so, and the people who have the energy and time are 
> very unlikely to be able to work on it much without breaking something 
> significant.  Distutils is also far too flexible in some areas to be 
> able to improve much while maintaining 100% backward compatibility -- it 
> doesn't enforce One Obvious Way To Do It.

Basically volunteer projects like this just won't move forward when 
doing so is painful -- I think distutils is like this, and though you 
suffered through that with the development of setuptools I think part of 
this recent discussion is that it's still not really self-sustaining. 
So I think we need a bit higher bar of code quality (and brevity) than 
in a commercial project.

> What's more, there are very few people who've even said they like the 
> distutils API or think it's a good fit for the application area.  And, 
> frankly, the domain knowledge embedded in the distutils are of fairly 
> limited scope and kind:
> * Extension building, compile/link options and defines
> * Wildly-differing installation path schemes across platforms
> * Platform distribution formats like bdist_rpm, bdist_wininst, and 
> bdist_msi
> Most other things the distutils do are either well-specified, obsolete 
> (e.g. its internal logging and option parsing libs), or probably not 
> worth keeping (e.g. bdist_dumb).

Yes -- what distutils really does just isn't that interesting or 
complicated.  There's a lot of arcane knowledge built into the build 
process, but it's not well expressed or particularly useful, and for 
pure-Python packages there really isn't any arcane knowledge to be had. 
  There's other features, but a lot of them aren't well enough 
implemented to be reliable, or they are adapted in eclectic ways by 
individual packages in a way that makes them unpredictable.  The arcane 
knowledge is distutils is broken and unusable -- I don't think distutils 
reform would actually save much that was useful.

>> > Maybe a "distutils 2" project could start outside Python, using 
>> distutils
>> > and setuptools code as
>> > legacy infrastructure, and taking back pieces of it,
>> >
>> > Then it could be re-integrated in Python as a replacement for 
>> distutils when
>> > it is mature ?
>> Only if much effort and study went into the planning of this 
>> re-integration.
> That's why at least some of the discussion has been around requirements 
> gathering and PEP-writing as a first step.

There is a much better sense of what the scope of distutils should be 
now than when it was written, and the PEP process could make that 
clarity explicit.  I suspect that when the scope is made clear that the 
implementation just won't be that complex.

> My own inclination is that a scalable future for distutils means an 
> improved sdist format, the end of setup.py as an command-line interface, 
> and community-maintained platform-specific installation tools that 
> process source or binary distributions.  Most complaints about distutils 
> (and setuptools, for that matter) are focused on installation 
> policy&preference issues.  Making it possible and practical for a 
> variety of tools to flourish around a standardized format (ala WSGI) 
> seems like the way to go.

I'd like to see an improvement of sdist, toward a more declarative and 
introspectable system.  Just including EGG-INFO in sdist would be a big 
help, and allow the easy reading of the egg metadata without having to 
deal with the binary aspects of .egg (which remain very challenging to 
use reliably).  In pyinstall I'm unpacking and running egg_info to get 
this data, but that's very awkward and that metadata should really just 
be there without having to invoke any code.

I'm not sure I agree with removing setup.py, though I dislike how it 
functions currently -- that you kind of have to poke it from the side to 
get basic information out of it, instead of something more declarative. 
  In some ways it's the distutils/setuptools interface that most people 
actually use -- pyinstall for instance only calls setup.py in 
subprocesses to install the package, and never touches it directly.  So 
anything that acts fairly similar to the current setup.py's will be 
compatible.  This is part of why I don't think the backward 
compatibility issue is as difficult as Guido suggests.

Though... really if pyinstall could easily detect a new source format 
and only setup.py with the old source format, it wouldn't be hard to 
support both.  There does need to be room for custom code, but mostly 
for the build/compilation process.

> Notice that the existence of eggs has already allowed buildout, 
> virtualenv, and pyinstall to appear.  But eggs don't handle installing 
> tests or documentation, and they have to be prebuilt by platform.  An 
> improved sdist format, on the other hand, with standardized layout and 
> metadata would address all of those issues.
> The tools for building this format and APIs for inspecting it would be 
> candidates for the stdlib, in much the same way that wsgiref was - the 
> spec is/should be stable, and those parts that are 
> compiler/install-layout specific will need to be maintained in the 
> stdlib anyway, for Python's own build infrastructure.
> In that sense, "distutils 2" would not be so much a rewrite of the 
> distutils, as the separation of them into tools for distributing, and 
> tools for installing, where some of the tools for installing may be 
> community-maintained.

I agree.  For instance, I don't see a particular advantage to making 
pyinstall part of the core of Python -- it would increase adoption and 
add a certain review process, but its usefulness is not contingent on 
everyone using it.  It's more important that there's a consensus (or... 
movement towards some consensus) about how people write and distribute 
packages.  If some distutils 2 effort just addressed that, and avoided 
things like installation that mostly can be avoided (though installation 
needs to be co-developed, of course), it should keep the scope down so 
that it's not quite as hard to agree on things.

Ian Bicking : ianb at colorstudy.com : http://blog.ianbicking.org

More information about the Distutils-SIG mailing list