Sorry about delay... draft 2:
The Plone Framework team has, in consultation with the wider developer
community, made an executive decision. :)
Going forward, there is consensus that we should use Zope 3 style
programming practices whenever possible. One part of that is that things
that don't need to be Zope 2 products shouldn't live in in
$INSTANCE_HOME/Products/ - instead, they should be simple Python
packages, living in $INSTANCE_HOME/lib/python or somewhere else on the
PYTHONPATH that Zope is given when it starts up.
In doing so, we would like to impose the following guidelines for code
that is part of Plone core.
I. Generic components without specific Plone dependencies live
directly under the top-level 'plone' namespace. A good example is the
the Zope3-style 'plone.i18n' (http://svn.plone.org/svn/plone/plone.i18n).
It is desirable to factor out generic interfaces and code into such
packages whenever possible, to foster re-use.
Packages should have as few dependencies as possible. Thus, if
plain-Python will do, that is better than plain-Zope 3, which is better
than code that depends on specific facets of Zope 2.
II. Extensions of such general components (or separate components)
that provide a tighter integration with Plone-the-application should
live in the secondary namespace 'plone.app'. See for example
Components that *need* to be Zope 2 products will most likely continue
to live in $INSTANCE_HOME/Products still, at least for now. If possible
(which it may not be), however, you should try to not depend on
components being Zope 2 products.
III. Packages in the svn repository should follow modern Python
guidelines and provide the necessary information to be packagable as eggs.
The easiest way of achieving this is to use the ZopeSkel paste deploy
script, as follows.
1. Download ez_setup.py from
2. Run ez_setup.py in Python:
$ python ez_setup.py
This will install the 'easy_install' program, normally to the Place
where the Python binary is found. Look in the log messages of the
installation script to see where they land. For more information, see
3. Install ZopeSkel:
$ easy_install ZopeSkel==dev
This will install Paste Deploy and the 'paster' script in the same
location as easy_install (again, watch the terminal output) and some
Zope skeletons to use with this tool. To see them, run:
$ paster create --list-templates
4. To create a basic Plone package, run:
$ paster create -t plone
It will ask you a number of questions and then generate the basic
package layout. When asked for a project name, use the dotted name of
the package, e.g. 'plone.i18n'.
To create a plone.app package instead, run
$ paster create -t plone_app
When ready, import the package to the Plone svn repository.
To learn more about setuptools, see
in particular, see
Should you have any questions, please ask on the plone-developers list.
Martin & the rest of the Framework Team
Framework-Team mailing list