[Distutils] formencode as .egg in Debian ??
Phillip J. Eby
pje at telecommunity.com
Fri Nov 25 15:15:07 CET 2005
At 11:34 AM 11/25/2005 +0000, Paul Moore wrote:
>On 11/25/05, Donovan Baarda <abo at minkirri.apana.org.au> wrote:
> > On thing about this worried me;
> > If TurboGears depends on an "egg'ed" ElementTree, what happens if a
> > system has ElementTree installed as a non-egg package? Does installing
> > TurboGears as an egg inside a Debian package require also installing
> > another ElementTree as an egg inside a Debian package? Or worse, will it
> > automatically download and install an egg'ed ElementTree not from a
> > Debian package? Will you end up with two ElementTree's installed, one
> > egg'ed and one not?
>Yes. That's the issue I'm not keen on, and I believe your
>interpretation is right - TurboGears depends on ElementTree, which is
>fine. But *because* TurboGears is an egg  it *needs* an egg-ified
>version of ElementTree. If I have ElementTree installed already, TG
>will *ignore* that, and grab an extra version from the internet (at
>install time, presumably, assuning I'm using EasyInstall - but what if
If you're not then you'll just get an error at runtime telling you the
integrity checking failed; i.e. a DistributionNotFound error.
>just to get it in egg format.
More precisely, just to get something it knows for sure is an ElementTree
whose version is in the desired range.
> It's not exactly because TG is an egg per se, as easy_install and
>dependency checking is involved as well, which not all eggs have to
>use. I'm slowly coming to understand that eggs (and setuptools, and
>easy_install, which are related but subtly different items) provide a
>host of largely unrelated functionality,
Yep; this is why they have separate web pages. ;-)
(And also why some people call it the "eggs/easy_install/setuptools trifecta".)
>and discussions are getting
>confused because these are not being separated out sufficiently.
>- what would happen if I downloaded the TurboGears egg and just put it
>on sys.path - no easy_install or whatever?)
You could import stuff from it, but it might or might not work. Where it
explicitly require()'s things or tries to load a plugin, you'll get
The drop-in-and-go aspect of eggs is mainly used for application plugins in
systems like Trac, although in truth they actually use the discovery
machinery to scan their plugins directory and identify which plugins are
loadable - that is, which plugins can have all their dependencies met.
This is one reason that runtime integrity checks are important; an app can
detect that it doesn't have what's needed for a given plugin, and skip
loading it. This is also why dependency resolution needs to be able to
roll back if it fails, even for deeply-nested dependencies.
More information about the Distutils-SIG