Describe a buildout recipe to avoid fetching zope 3 libraries when installing eggs with zope 3 depedencies in a zope 2 buildout

I got tired removing zope.interface, zope.component, zope.deferredimport, zope.event, … of my eggs folder inside my buildout when installing package such as z3c.sqlalchemy in my Zope2 / Plone buildouts …

After the discussion on Zope3-users list and thanks to Jim lights, I wrote a really simple recipe which just create egg links to zope libraries in your develop-eggs so that setuptools can see that the dependencies are
already satisfied.

So if you list your zope library :

$ ls yourbuildout/parts/yourzope2/lib/python/zope

app               configuration    documenttemplate  exceptions  i18n           __init__.py  pagetemplate  schema    structuredtext  testbrowser  viewlet
cachedescriptors  contentprovider  dottedname        formlib     i18nmessageid  interface    proxy         security  tal             testing
component         deprecation      event             hookable    index          modulealias  publisher     server    tales           thread

You will get

$ ls yourbuildout/develop-eggs

zope.app.component.egg-info     zope.app.security.egg-info      zope.dottedname.egg-info     zope.interface.egg-info     zope.structuredtext.egg-info
zope.app.egg-info               zope.app.testing.egg-info       zope.event.egg-info          zope.modulealias.egg-info   zope.tal.egg-info
zope.app.event.egg-info         zope.cachedescriptors.egg-info  zope.exceptions.egg-info     zope.pagetemplate.egg-info  zope.tales.egg-info
zope.app.i18n.egg-info          zope.component.egg-info         zope.formlib.egg-info        zope.proxy.egg-info         zope.testbrowser.egg-info
zope.app.interface.egg-info     zope.configuration.egg-info     zope.hookable.egg-info       zope.publisher.egg-info     zope.testing.egg-info
zope.app.pagetemplate.egg-info  zope.contentprovider.egg-info   zope.i18n.egg-info           zope.schema.egg-info        zope.thread.egg-info
zope.app.publisher.egg-info     zope.deprecation.egg-info       zope.i18nmessageid.egg-info  zope.security.egg-info      zope.viewlet.egg-info
zope.app.schema.egg-info        zope.documenttemplate.egg-info  zope.index.egg-info          zope.server.egg-info

Where each of these file will be seen for setuptools as an egg:

$ cat yourbuildout/develop-eggs/zope.app.component.egg-info

Metadata-Version: 1.0
Name: zope.app.component
Version: 0.0

Sure this might look like an ugly hook but I can’t wait for zope 2 eggification …