[Distutils] formencode as .egg in Debian ??
Phillip J. Eby
pje at telecommunity.com
Thu Nov 24 17:43:29 CET 2005
At 03:49 PM 11/24/2005 +0100, Matthias Urlichs wrote:
>Hi,
>
>Christopher Lenz:
> > (And no, I'm not going to repeat the numerous attempts by Phillip to
> > politely and comprehensively explain it all.)
> >
>Sorry -- I don't buy that. I've read all these messages too, and I also
>don't know what's in the metadata besides dependency information.
Whatever the project developer wants to put there, or wants people creating
projects that use his project to put there. It's essentially an
inter-project communication and configuration system:
http://peak.telecommunity.com/DevCenter/setuptools#dynamic-discovery-of-services-and-plugins
http://peak.telecommunity.com/DevCenter/setuptools#defining-additional-metadata
http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
http://peak.telecommunity.com/DevCenter/PkgResources#entry-points
http://peak.telecommunity.com/DevCenter/PkgResources#metadata-api
These features are already being used by Trac, TurboGears, SQLObject,
Paste, and others. Other projects are contemplating moving to the use of
egg entry points to improve their extensibility, or increasing the use that
they currently make of these features.
>Debian, rpm, and other Linux packaging systems don't need to install
>Python-specific dependency information in their packages.
>
>It's probably nice to have so that non-system Python packages can complain
>properly, instead of throwing an incomprehensible exception later (and
>leaving one with a partially-installed system or whatever), but that's a
>different problem.
That's an interesting perspective, but it's viewing the world through
vendor-colored glasses. Unless the project developer is wearing similar
glasses (i.e., has decided to commit to Debian as their sole platform),
though, it's not a practical one. From the point of view of people like
the author of TurboGears, it's the egg dependency system that allows them
not to have to worry about which packaging system the user has, or doesn't
have.
I mention this not to be disagreeable, just to point out that the world in
which egg dependencies are of no benefit, needless complexity, etc., is not
the same world in which the project developers using eggs live.
Case in point: this thread began because somebody wanted to package
TurboGears and its dependencies for Debian. But that project wouldn't have
been viable without the egg system already existing, and there was
certainly no way for TurboGears to have started its life as anything but a
"non-system Python package". One reason TurboGears is popular is because
it's well-supported, and it's well-supported in part because it can
"complain properly" (as you describe it above) no matter what platform it's
running on.
Another reason TurboGears is popular because of its high degree of reuse of
existing code. Indeed, TurboGears has an unprecedented degree of reuse of
code for a Python project. How many Debian Python packages have even
*half* as many Python dependencies as TurboGears does?
Meanwhile, TurboGears is viral with respect to eggs. When you create new
web applications with it, those projects are also eggs, with dependencies
on TurboGears. And of course people are creating TurboGears add-ons, like
the identity package, and those have dependencies to TurboGears and other
eggs. Even if it were *only* TurboGears that was doing these things (and
it's not), you're going to have an "egg-splosion" on your hands here pretty
soon. ("Pretty soon" == ~1 year, assuming the current growth rate of eggs
is linear rather than exponential.)
Again, I don't think you're "wrong" to think that egg dependencies are
redundant - from within your particular point of view. But you need to
understand that for *Python* developers, being able to practically depend
on other packages in a cross-platform way is a new and powerful feature
which is *not* provided by Debian or any other packaging system, unless
it's wrapping eggs. So, from your perspective, you already have this
feature, but for projects using eggs, you really *don't* have the feature,
because the data is not economically accessible to them.
And that's only *one* feature of eggs, not even getting into each new
egg-specific feature that each project can create, building on the entry
point and metadata features. Of course, those features have a different
growth curve for adoption than the dependency features do, since plugin
features are more of a hub-and-spokes model with limited network
effects. And an individual plugin project is less likely to need to end up
as a Debian package anyway, so the plugin impact will be more slow-moving
unless somebody puts out a "killer app" that everybody wants plugins for.
Anyway, I appreciate your frank and open-minded participation in this
discussion, and I hope that together we can get the remaining issues resolved.
More information about the Distutils-SIG
mailing list