[Distutils] formencode as .egg in Debian ??

Phillip J. Eby pje at telecommunity.com
Tue Nov 22 23:30:28 CET 2005

At 02:00 PM 11/22/2005 -0600, Ian Bicking wrote:
>An egg and Python packages don't map 1-to-1.  An egg can contain multiple 
>packages (which is fairly uncommon so far), but also a top-level package 
>can exist in more than one egg (i.e., namespace packages, like 
>zope.interfaces or paste.script).  The metadata belongs to the egg, not to 
>the package inside the egg.

In addition, an egg can contain various Python modules, and still have 
metadata even if no packages are involved.

>That said, I think it would be nice if the transition was smoother. E.g., 
>if a file "ElementTree-1.2.6.egg-provided" could point to an installed 
>elementtree library (similar to the currently-supported .egg-link file, 
>but also slightly different).  And, perhaps, 
>elementtree/ElementTree.egg-info could exist (with the same data as the 
>current ElementTree-1.2.6/EGG-INFO), though I think the simpler case where 
>extra metadata is disallowed would be easier.

It's not necessary to create a new way to do this; you can simply create 
'ElementTree.egg-info' in site-packages and put the PKG-INFO file in there 
(and any other egg-info files), and it's supported by the existing 
mechanisms just fine, as long as the project has no top-level resources 
(files, data directories, etc.), and does not participate in namespace 

So, for practical purposes, this would be more of a way to upgrade legacy 
packages to be detectable by egg-based packages, than a way to install egg 
packages as non-eggs.  However, it might be a workable compromise for 
getting many of the Debian-packaged TurboGears dependencies to be usable 
while still mostly conforming to the existing Debian policy.

A few months ago, this approach wouldn't have worked due to possible 
conflicts with locally-installed eggs, but setuptools now has runtime 
conflict management that can smooth it over as long as you haven't imported 
any of the conflicting packages yet.

>   That would only work for situations when there's a 1-to-1 mapping from 
> packages to eggs/projects, but that covers many situations, especially 
> cases where we're currently seeing conflicts.  You lose the ability to 
> easily support multiple versions of a package with this, though that 
> could probably be handled too.

This approach won't support multiple simultaneous versions, but then 
neither do most system packaging tools, and if this is strictly a 
workaround for system packagers who don't want to move everything to eggs, 
then it works just fine for that.  They will, however, have to be careful 
about namespace packages in setuptools-based packages, since the package 
directories will be shared by two separately-installed projects, and each 
package will want to include its own __init__.py files.

More information about the Distutils-SIG mailing list