Verwalten von Projekten mit zc.buildout - Teil 8: Erstellen eines neuen Pakets PDF Drucken E-Mail
Geschrieben von: Andreas Mantke   
Mittwoch, den 05. März 2008 um 21:44 Uhr
Wie Sie ein neues Ei basiertes Paket zu Ihrem Buildout hinzufügen.

Das Hinzufügen eines neuen maßgeschneiderten Paketes unterscheidet sich nicht wesentlich vom Installieren eines von einem Drittanbieter.

Erstellen eines traditionellen Zope-2-Produktes

Um ein traditionelles Zope-2-Produkt zu erstellen, legen Sie es in das Verzeichnis products/ auf der obersten Ebene und starten Sie Zope neu. Wie zuvor erläutert, werden Produkte, die hier platziert sind, automatisch beim Start gefunden und ihre Dateien configure.zcml werden automatisch ausgeführt.

Erstellen eines Eies (egg)

Wenn Sie Produkte verwenden, können Sie natürlich nicht von der ergänzenden Funktionen von Eiern (eggs) profitieren, einschließlich der automatischen Abhängigkeitsverwaltung, der Verteilung über den Cheese Shop und verschachtelte Namensräume (nested namespaces).

Der einfachste Weg, um ein neues Ei (egg) zu erstellen, besteht darin, das Kommando paster zu benutzen, das wir bereits benutzt haben, um Buildout zu erstellen. Um ein neues Grundpaket mit einem Namensraum auf der obersten Ebene (z.B. Ihr Unternehmensname) und einem speziellen Namen zu erstellen, gehen Sie in das Verzeichnis src/ und lassen Sie folgendes laufen:

 $ cd src     
$ paster create -t plone myorg.mypackage

Sie werden eine Serie von Fragen gefragt. Stellen Sie sicher, dass das Namensraum-Paket und der Paketname mit dem Namen des Eies (egg) übereinstimmen. In diesem Fall ist das Namensraum-Paket myorg und der Paketname mypackage. Antworten Sie im allgemeinen False auf die Frage, ob Ihr Paket ein Zip-Archiv ("zip safe") werden soll. Geben Sie die gewünschten anderen Metadaten ein.

Sie werden nun haben:

  • Ein setup.py, das die Metadaten enthält, die Sie eingeben haben
  • Ein Paket in myorg.mypackage/myorg/mypackage. Ihr Quellcode gehört hierhin
  • Dateien configure.zcml, tests.py und ein Paar andere nützliche Startpunkte im Rohfassung (Gerüst).
  • Etwas allgemeine Dokumentation in myorg.mypackage/docs.

Sie müssen dieses Paket natürlich auch zum Buildout hinzufügen. In buildout.cfg können Sie haben:

 [buildout]     
...
eggs =
...
myorg.mypackage

develop =
src/myorg.mypackage

Außer wenn Sie planen, dieses Paket über ein anderes einzubeziehen, brauchen Sie wohl auch einen ZCML-Slug:

 [instance]     
...
zcml =
myorg.mypackage

Vergessen Sie nicht, Buildout erneut laufen zu lassen nachdem Sie Ihre Änderungen vorgenommen haben:

 $ ./bin/buildout     

Abhängigkeiten bestimmen

Falls Ihr neues Paket ausdrückliche Abhängigkeiten hat, können Sie diese in setup.py auflisten. Auf diesem Weg wird Buildout in der Lage sein, diese auch herunterzuladen und zu installieren. Abhängigkeiten sind in dem Argument install_requires zur Methode setup() aufgelistet. Standardmäßig ist hier setuptools aufgeführt, da wir dies für die Unterstützung von Namensraum-Paketen (namespace packages) benötigen. Um sqlalchemy 0.3 (aber nicht 0.4) und den MySQL-Python-Treiber hinzuzufügen, können Sie dies ergänzend eingeben:

 install_requires=[     
'setuptools',
'sqlalchemy>=0.3,<0.4dev',
'MySQL-Python',
],

Hochladen Ihres Eies (egg) in den Cheese Shop

Falls Sie Ihr Paket mit dem Rest der Python-Kommunity teilen wollen und es einfach gestalten wollen, es unter Verwenden von Werkzeugen wie Buildout und easy_install zu installieren, können Sie das Paket in den Cheese Shop hochladen.

Bevor Sie dies tun, sollten Sie:

  • Übermitteln Sie Ihre neuesten Änderungen und markieren (taggen) Sie das Release in Subversion, falls zutreffend.
  • Entfernen Sie (zeitweise) die Datei setup.cfg: dies macht aus Ihrem Paket ein Entwickler-Release.
  • Stellen Sie sicher, dass die Versionsnummer in setup.py korrekt ist. Hierfür sollten übliche Konventionen wie beispielsweise "1.0b2" für die zweite Beta von Version 1.0 oder "2.1.3rc1" für den ersten Releasekandidat von Version 2.1.3. verwandt werden.
  • Falls Sie Mac OS X benutzen, lassen Sie export COPY_EXTENDED_ATTRIBUTES_DISABLE=true zuerst ein einer Shell laufen - andernfalls wird das Ei (egg) Mac-OS-X-Ressourcen-Verzweigungen enthalten, die zu Problemen führen, wenn Ihr Ei (egg) unter Windows benutzt wird.

Wenn Sie fertig sind, lassen Sie das folgende Kommando aus dem Verzeichnis Ihres Paketes laufen (z.B. src/myorg.mypackage):

 $ python setup.py egg_info -RDb "" sdist bdist_egg register upload   

Dies wird Sie danach fragen, ein Konto im Cheese Shop zu erstellen,m sofern Sie nicht bereits eines haben. Sie können dieses Kommando so oft laufen lassen, wie sie eine neue Version freigeben (releasen) wollen (wohl mit einer neuen Versionsnumer).