Zum Erstellen eines Python-Eggs, das ein Zope2-Produkt enthält, verwenden wir
das ZopeSkel-Template plone
:
$ cd src
$ $ ../bin/zopeskel plone_basic
…
Enter project name (or q to quit): vs.policy
Expert Mode? (What question mode would you like? (easy/expert/all)?) ['easy']: all
Namespace Package Name (Name of outer namespace package) ['vs']:
Package Name (Name of the inner namespace package) ['policy']:
Version (Version number for project) ['1.0']:
Description (One-line description of the project) ['']: Policy package for demonstration purposes
Register Profile (Should this package register a GS Profile) [False]: True
Long Description (Multi-line description (in ReST)) ['']: Policy package for demonstration purposes
Author (Name of author for project) ['']: Veit Schiele
Author Email (Email of author for project) ['']: kontakt@veit-schiele.de
Keywords (List of keywords, space-separated) ['']: Zope Plone
Project URL (URL of the homepage for this project) ['http://svn.plone.org/svn/collective/']: https://github.com/veit/vs.policy
Project License (Name of license for the project) ['GPL']:
Zip-Safe? (Can this project be used as a zipped egg? (true/false)) [False]:
Zope2 Product? (Are you creating a product for Zope2) [True]:
Creating directory ./vs.policy
…
Hiermit werden folgende Dateien erzeugt:
vs_buildout/src/vs.policy
├── CHANGES.rst
├── CONTRIBUTORS.rst
├── README.rst
├── bootstrap.py
├── buildout.cfg
├── docs
│ ├── LICENSE.GPL
│ └── LICENSE.txt
├── setup.cfg
├── setup.py
└── src
└── vs
├── __init__.py
└── policy
├── __init__.py
├── configure.zcml
├── profiles
│ ├── default
│ │ └── metadata.xml
│ └── testing
│ └── metadata.xml
├── testing.py
└── tests
├── __init__.py
└── test_example.py
setup.py
enthält Anweisungen für Setuptools, Distribute oder Buildout, wie die Paketdistribution verwaltet werden soll.
setup.cfg
enthält zusätzliche Konfigurationsinformationen, in diesem Fall über das verwendete ZopeSkel-Template.
README.rst
Dokumentation des Pakets.
Soll das Paket im PyPI veröffentlicht werden, wird der Inhalt zusammen mit
dem Wert für long_description
in der setup.py
-Datei als HTML gerendert.
docs/
Enthält zusätzliche Dokumentation einschließlich der Software-Lizenz
CHANGES.rst
wird verwendet für die Change Log-Einträge im PyPI.
src/vs
das Namespace-Package, das in der __init__.py
-Datei eine Methode für
Setuptools und Distribute bereitstellt.
src/vs/policy
Das Wurzelverzeichnis des Paketes selbst.
src/vs/policy/__init__.py
Datei, die dieses Paket als Zope2-Produkt initiiert.
Ggf. wird diese Datei auch benötigt um Archetypes-Artikeltypen zu erstellen. Siehe hierzu Initialisierung und Hinzufügen-Rechte.
src/vs/policy/configure.zcml
Die wesentliche Zope-Konfigurationsdatei für unser Paket. Diese wird automatisch von Plone beim Starten der Instanz geladen.
src/vs/policy/testing.py
enthält ein Gerüst für Integrationstests. Wir werden dieses später durch unsere eigenen Tests ersetzen.
Nachdem das Python-Egg im src
-Verzeichnis erstellt worden ist, sollten
wir es noch in der devel.cfg
-Datei eintragen. Der instance-base
-Abschnitt
übernimmt die Eggs:
[buildout]
…
develop =
src/vs.policy
…
[instance-base]
eggs +=
…
vs.policy
Für Eggs, die in Plone-Sites ≤ 3.3 verwendet werden sollen, kann
z3c.autoinclude nicht
verwendet werden. Dieses Paket erstellt automatisch zwei neue ZCML-
Anweisungen: includeDependencies
und includePlugins
. Es ist mit dem
ZopeSkel-Template bereits in der Datei src/vs.policy/setup.py
verwendet
worden:
setup(name='vs.theme',
…
entry_points="""
# -*- entry_points -*-
[z3c.autoinclude.plugin]
target = plone
""",
…
)
In Plone ≤ 3.3 muss hingegen noch folgendes in Die Buildout-Konfiguration eingetragen werden:
[instance]
…
zcml =
vs.policy
Damit erstellt Buildout in der Instance einen sog. zcml-slug z.B. im
Verzeichnis parts/instance/etc/package-includes/
die Datei
001-vs.policy-configure.zcml
mit folgendem Einzeiler:
<include package="vs.policy" file="configure.zcml" />
Um zu Testen, ob das Python-Egg in der Instanz zur Verfügung steht, rufen wir
den Python-Interpreter zopepy
auf:
$ ./bin/zopepy
>>> from vs import policy
Da kein Fehler für den Import ausgegeben wurde, scheint das Egg geladen zu
werden, und der Python-Interpreter kann mit Strg-D
(unter Windows
Strg-Z
) wieder verlassen werden.
Alternativ kann auch die Instanz gestartet werden mit ./bin/instance
;
anschließend sollten sich im Zope Management Interface → Control_Panel →
Products das vs.policy
-Produkt finden.