Kudos to Chris McDonough, as well!

Chris has been steadily at work this week on finishing his Basket product, which makes it possible to distribute Zope add-ons using Phillip Eby's "eggs".

This product is a short-term implementation of the egg-related features, which will go away once the feature lands in the Zope core.

Quoting from the product's README:

Overview

Basket is a Zope 2 product which allows you to employ the Python Egg format to deploy other Zope 2 products.

Where Do Eggs Go?

You can put Product eggs anywhere on your Zope 2 instance's PYTHONPATH. A "safe" place to put them is $INSTANCE_HOME/lib/python which is on the PYTHONPATH of every post-2.6 Zope 2 installation.

Definitions

Product -- A Python package that (optionally) includes an initialization function which gets called at Zope startup time. Products may be packaged as eggs using Basket; otherwise they are typically packaged as tarballs which are meant to be unpacked in a Zope 2 "Products" directory.

Egg Product -- a Product packaged up as part of a Product Distribution.

Product Distribution -- A Python "egg" which contains one or more Zope 2 Products.

Chris' work includes substitute / replacement classes for the "resource files" traditionally used by Zope2 product developers (ImageFile => ImageResource, DTMLFile => DTMlResource, and PageTemplateFile => PageTemplateResource), allowing those resources to be read either from the egg's zip file or from a traditional directory-based product.

I am close to finishing work to make it possible to load skins from eggs, as well as converting the CMF itself to use the new resource classes.