|
Ansehen des Kernkonzepts in Einzelheiten Terminologie Bevor wir beginnen, lassen Sie uns direkt ein Bißchen derTerminologie klären:
- Zope-Installation
- Dies ist das, was Sie bekommen, wenn Sie Zope herunterladen und kompilieren oder wenn Sie ein binäres Zope-Installationsprogramm benutzen.
- Software-Heimatverzeichnis (Umgebungsvariable $SOFTWARE_HOME)
- Innerhalb der Zope-Installation enthält das Verzeichnis lib/python den gesamten Python-Programmcode, der den Kern des Zope-Anwendungsservers ausmacht, bekannt as das Software-Heimatverzeichnis. Die verschiedenen Zope-3-Pakete werden hier verteilt.
- Zope-Instanz
- Eine Zope-Installation kann mehrere Instanzen unterstützen. Das Skript mkzopeinstance.py aus der Zope-Installation wird benutzt, um eine neue Instanz zu erstellen. Jede Instanz hat ein Kontrollskript zum Starten und Stoppen der Server, ein Konfigurationsdatei zope.conf, ein Produkteverzeichnis und eine Datei Data.fs, die die ZODB enthält. In diesem Tuturial werden wir Buildout eine Zope-Instanz für uns erstellen und konfigurieren lassen.
- Instanz-Heimatverzeichnis (Umgebungsvariable $INSTANCEHOME)
- Der Pfad zu der aktuellen Zope-Instanz.
- Pythonpfad (Umgebungsvariable $PYTHONPATH, auch bekannt als sys.path)
- Der Python-Interpreter wird nach Modulen in einem oder mehr Verzeichnissen schauen, bekannt asl Pythonpfad. Wenn Zope läuft, umfaßt dies normalerweise die globalen Pythonmodule, die Standardbibliothek bildend, das Verzeichnis site-packages des Interpreters, wo die "globalen" Module und Eier (Eggs) von Drittanbietern installiert sind, das Zope-Software-Heimatverzeichnis und das Verzeichnis lib/python innerhalb des Heimatverzeichnisses der Instanz. In diesem Tuturial werden wir sehen, wie Buildout eine Anzahl von spezifischen Eiern (Eggs) auch während der Laufzeit zum Pythonpfad hinzufügt
- Pythonpaket
- Ein allgemeiner Ausdruck, der eine verteilbares Pythonmodul beschreibt. Auf dem einfachsten Niveau ist ein Paket ein Verzeichnis mit einer Datei __init__.py und etwas Python-Programmcode.
- Zope-Produkt
- Eine spezielle Sorte von Pythonpaket, benutzt um Zope zu erweitern. In alten Versionen von Zope waren alle Produkte Verzeichnisse in dem speziellen Verzeichnis Products einer Zope-Instanz und hätten einen Pythonmodulnamen beginnend mit "Products" gehabt. Zum Beispiel ist der Kern von Plone einCMFPlone genanntes Produkt, bekannt in Python als Products.CMFPlone.
- Python-Ei (Egg)
- Ein Weg, um Pythonpakete zu packen und zu verteilen. Eier (Eggs) enthalten eine Datei setup.py mit Metadaten wie Autorenname und -EMailadresse und Lizenzinformationen, wie auch Informationen über Abhängigkeiten. file with metadata such as the author's name and email address and licensing information, as well as information about dependencies. Installationswerkzeuge (setuptools), die Python-Bibliothek, die den Ei-Mechanismus antreibt, ist in der Lage, automatisch Abhängigkeiten für Eier (Eggs), die Sie installieren, zu finden und herunterzuladen. Es ist sogar möglich für zwei verschiedene Eier (Eggs), gleichzeitig verschiedene Versionen der gleichen Abhängigkeit zu benutzen. Eier (Eggs) unterstützen auch eine Funktion, die entry points genannt wir, eine Art von allgemeinem Plug-In-Mechanismus. Wir werden Erweiterungspunkte (extension points) hier nicht im Detail behandeln, aber Sie können mehr über sie lesen (und andere Funktionen von Eiern (Eggs)) auf der PEAK-Webseite.
- Der Cheese Shop (auch bekannt als PyPI, der Pythonpaketindex)
- Der Cheese Shop ist ein Index (Verzeichnis), der tausende von Pythonpaketen beherbergt. Sie können ihn durchsuchen, wenn Sie nach einem bestimmten Paket suchen. Noch wichtiger ist, dass Installationswerkzeuge (und Buildout und das Skript easy_install) dieses Verzeichnis befragen können, um Eier (Eggs) herunterzuladen und automatisch zu installieren.
- easy_install
- Ein Konsolenskript, das benutzt werden kann, um den Cheese Shop zu durchsuchen und Pakete in die globale Python-Umgebung zu installieren. Wir werden es nur verwenden, um ein Paar globale Pakete zu installieren, da Buildout Eier (Eggs) für uns in einer Weise verwaltet, die zu jedem Buildout-Projekt lokal ist und damit globale Versions-Zweideutigkeiten vermeidet.
- Namensraum-Paket (Namespace package)
- Eine Funktion des Installationswerkzeugs (setuptools), die es ermöglicht, mehrere separate Pakete zu verteilen, die einen Namensraum auf der obersten Ebene teilen. Zum Beispiel teilen die Pakete plone.theme und plone.portlets den Namensraum "plone" auf der obersten Ebene, aber sie werden als separate Eier (Eggs) verteilt. Wenn sie installiert sind, lebt jedes Ei (egg) in seinem eigenen Verzeichnis (oder möglicherweise ein komprimiertes Archiv dieses Verzeichnisses). Ohne Namensraum-Pakete müßten wir ein Riesen-Plone-Paket verteilen, mit einem Plone-Verzeichnis auf der obersten Ebene, das alle möglichen Kinder (children) enthält, z.B. plone/theme und plone/portlets.
Der magische Produkte-Namensraum Wenn Zope ein "Produkt" findet, wird es einen Eintrag in Control_Panel/Products im Wurzelverzeichnis des ZMI erstellen und die Methode initialize(), die in der Datei__init__.py der Wurzel des Produkt's gefunden wird, bei jedem Start von Zope ablaufen lassen. Nicht jedes im Zusammenhang mit Plone benutztes Paket braucht ein Produkt zu sein, allerdings ist die "Beschaffenheit als Produkt" erforderlich für: - GenericSetup Profile
- Skin-Verzeichnisse, installiert als Ebenen (Layers) in dem Werkzeug portal_skins (allerdings nicht für Zope-3-Stil Browser-Ansichten)
Der einfachste Weg, um ein Produkt zu erstellen, besteht darin, es zu einem Verzeichnis in dem Verzeichnis Products einer Instanz (oder Buildouts) zu machen. Allerdings bis Zope 2.11 (das den Namensraum Products.* zu einem richtigen Namensraum-Paket gemacht hat) konnten wir Produkte nicht als Eier (eggs) verteilen. Viele Entwickler fanden es auch unnatürlich, alles in einem einzelnen "flachen" Namensraum zu halten. Es ist möglich, Pakete (einschließlich der als Ei verteilten) außerhalb des Products--Namensraums/-Verzeichnisses als Zope-2-Produkte zu benutzen. Um dies zu tun, müssen wir eine Zeile, wie die folgende, in die Datei configure.zcml des Paketes einfügen: <configure xmlns="http://namespaces.zope.org/zope" xmlns:five="http://namespaces.zope.org/five"> <five:registerPackage package="." initialize=".initialize" /> </configure> Zweitens ist es wichtig zu verstehen, dass Pakete außerhalb des Namensraumes Products nicht automatisch gefunden werden, wenn Zope startet. Falls Sie Dateien configure.zcml enthalten (wie dies die meisten Pakete tun), muss dies ausdrücklich von irgendwo eingebunden werden. Dies mag sein: - Die Datei configure.zcml eines anderen Paketes
- Zope's site.zcml, die Wurzel aller ZCML-Dateien, die sich im Verzeichnis etc im Heimatverzeichnis der Instanz befindet
- Ein ZCML-Slug, ein Einzeiler, erstellt im Verzeichnis etc/package-includes der Zope-Instanz mit einem Namen wie mein.paket-konfigurations.zcml.
In allen Fällen ist die Schreibweise dieselbe: <include package="my.package" file="configure.zcml" /> Falls Sie Dateien meta.zcml oder overrides.zcml haben, können Sie diese auch <include /> Anweisungen hinzufügen. Falls Sie Slugs benutzen, muss dies ordnungsgemäß benannt werden, z.B. my.package-meta.zcml oder my.package-overrides.zcml. Ein Slug kann nicht mehr als eine Zeile enthalten. Später in diesem Tuturial werden wir zeigen, wie Buildout Slugs für uns automatisch verwalten kann.
|