[Zope3-dev] Re: More thoughts on packaging
Tres Seaver
tseaver at zope.com
Tue Feb 17 10:41:32 EST 2004
Phillip J. Eby wrote:
> At 12:36 AM 2/18/04 +1100, Anthony Baxter wrote:
>
>> Jim Fulton wrote:
>>
>>> A major problem I have with distutils is that I have to write rather
>>> complex scripts to do somewhat simple things. I don't
>>> necessarily have a problem with capturing this meta data in Python.
>>
>>
>> Ok, then, as a step forward - perhaps someone who's familiar with the
>> current Z3 setup.py could do a first cut of what their new setup.py
>> would look like, assuming the backend magically appears. This at least
>> allows those of us with some knowledge of distutils innards (my eyes,
>> my eyes!) to get an idea of what the solution might entail.
>>
>> I'm not saying "come up with the perfect answer" but instead saying
>> "if distutils was implemented in a way that your current needs were
>> met, what would the setup.py say?"
>
>
> Speaking as another large package maintainer, I'd like setup.py to be
> either nonexistent, or automatically generated from something else
> that's modular.
+1. The configuration metadata in a typical setup.py can *never* be
introspected, for intsance, short of writing bytecode hacks to pick
apart the arguments passed to setup().
>> I know, for instance, that in my perfect world, there wouldn't be little
>> dinky text files (or xml crud) required - this stuff _can_ be
>> expressed in Python, and I'd prefer that it is.
>
> I'm certainly -1 on using XML for this, and I don't have a problem with
> using Python syntax. But the single file approach has got to go.
-1 for Python syntax; Turing-completeness is a *disadvantage* in a
configuration language (e.g., why is ZCML not in Python? why ZConfig?)
WRT the format, I am agnostic about the spelling, but anti-NIH suggests
that we should adopt a widely-supported parseable format:
- ConfigParser style INI files (order can't matter, some restrictions
on spelling section and key names).
- An XML dialect of some sort (we should be looking to how Debian and
RPM are spelling the XML variants of their package specification
files).
> The problem with putting everything in a setup.py is that it's not
> reusable. Modularity is what's needed for large systems like Zope and
> PEAK. For example, right now I bundle PyProtocols with the PEAK
> distribution. This means that I have to maintain two setup.py files
> that cover some of the same stuff: one for the independent PyProtocols,
> and one for PEAK that contains PyProtocols setup info. That's not too
> big a deal right now, but mainly what it does is discourage me from
> making other parts of PEAK separately distributable, because all the
> other parts are much harder to break out, and the dependencies between
> the parts change over time.
>
> Yes, I know you can create a convention for separating the information
> into multiple files, using execfile or import. But that convention's
> not a standard, so you can't really bundle somebody else's setup into
> your own to make a larger distribution.
>
> So, if the solution here is to create such a convention, it needs to be
> PEPed so that folks will adopt it.
Or not. The Python community has not always been amenable to adopting
stuff which large-system folks find invaluable.
> The existing 'setup.py' mechanism
> creates a tension that usually resolves in favor of distributing one
> mega-package instead of lots of little packages. So communities that
> develop a lot of software (e.g. Zope, PEAK, Twisted, and others) tend to
> release those systems as humongous "sumo distributions", instead of
> thinking more modularly. And they tend to duplicate effort because it's
> too bloody much trouble to distribute something from somebody else.
>
> Please understand that I'm not bitching about distutils. I *love* the
> distutils, because it's so much better than not having the distutils.
> I'm in this conversation to find solutions to take things to the next
> level. First, the modular assembly of packages so that people doing
> "sumo distributions" can break them up a little, and encourage people
> writing smaller packages to use an approach that will let their packages
> be bundled in larger packages. (It'd be nice, for example, if you could
> run something like 'setup.py generate' and have an existing 'setup.py'
> spit out data for incorporation into a larger package, to make
> redistribution of "legacy" packages easier, and to make migration to the
> modular approach easier.) Then, dependency information to automate
> assembly of already-present packages (e.g. slices of Zope or PEAK).
>
> Anyway, I guess what I'm saying here is that the convention of using a
> monolithic setup.py encourages monolithic packaging, and discourages
> CPAN-style packaging.
Exactly.
> It might seem I'm contradicting myself here, in that I'm advocating
> making *more* distributions, incorporating packages from multiple
> sources, which isn't the CPAN way either. But it's a stepping stone.
> Until we have a reliable CPAN-like mechanism to download and install
> dependencies, the gap will be filled by motivated packagers (like me and
> the Zope community) who want to provide their users with a single
> download for some targeted set of functionality. And if it's *easy* to
> do, then other people will create bundles of the stuff they need in
> their environment, and maybe offer them for others to download. So,
> it's a stopgap measure, but we have to evolve our way to CPAN, which
> means having survivable options at each point along the way, that are
> more functional than the previous step.
Agreed.
Tres.
--
===============================================================
Tres Seaver tseaver at zope.com
Zope Corporation "Zope Dealers" http://www.zope.com
More information about the Zope3-dev
mailing list