Installare un prodotto estensione
medio
L'installazione di un nuovo prodotto estensione dipenderà dal fatto che sia distribuito come un egg o come un prodotto Zope 2 classico.
Installare un prodotto Zope 2 classico
Il modo più semplice per sperimentare un prodotto Zope 2 classico consiste nell'estrarlo all'interno della cartella products/ del buildout. Se leggi la documentazione relativa alla cartella Products/ di una istanza Zope, questa è la stessa cosa.
Tuttavia questo approccio rende più difficile ridistribuire il tuo progetto e condividerlo con altri sviluppatori. Spesso è più facile mantenere il controllo se si lascia che buildout scarichi e installi il pacchetto per te. Puoi farlo con la sezione [productdistros] di buildout.cfg. Ad esempio, ecco come potresti installare DocFinderTab e CacheFu per il tuo progetto:
[productdistros]
recipe = plone.recipe.distros
urls =
http://www.zope.org/Members/shh/DocFinderTab/1.0.2/DocFinderTab-1.0.2.tar.gz
http://plone.org/products/cachefu/releases/1.1/CacheFu-1.1.tgz
nested-packages =
CacheFu-1.1.tgz
version-suffix-packages = Nota che CacheFu viene distribuito come una singola cartella contenente un numero di prodotti in sotto-cartelle, perciò lo elenchiamo sotto nested-packages.
Come sempre, se modifichi buildout.cfg, devi ri-eseguire buildout:
$ ./bin/buildout
Installare un egg
Finchè un egg ha una release in Cheese Shop o altrove, buildout può scaricarlo e installarlo, inclusa qualsiasi dipendenza esplicitamente specificata. Basta elencare l'egg, e opzionalmente una versione (altrimenti otterrai l'ultima disponibile), nell'opzione eggs.
[buildout]
...
eggs =
elementtree
borg.project>=1.0b1,<2.0dev
Se vuoi che buildout utilizzi un indice ulteriore rispetto a quello di Cheese Shop, puoi aggiungere una URL a find-links che contiene i link di download per gli egg. In effetti abbiamo già visto un esempio di questo: elementtree si trova in http://effbot.org/downloads, non direttamente nel Cheese Shop. Quindi dovremo specificare:
[buildout]
...
find-links =
http://dist.plone.org
http://download.zope.org/ppix/
http://download.zope.org/distribution/
http://effbot.org/downloads
eggs =
elementtree
Abbiamo anche elencato alcune delle locazioni di download per egg di Zope e Plone.
Riesegui ancora buildout per fare in modo che i cambiamenti abbiano effetto:
$ ./bin/buildout
Egg di sviluppo
Se non esiste una release per il tuo egg, o vuoi tracciare un egg in Subversion, estrailo nella cartella src/ . Fai in modo di ottenere l'egg completo, incluso il file di primo livello setup.py . Ad esempio, per ottenere il trunk di sviluppo di plone.portlets, esegui:
$ cd src $ svn co https://svn.plone.org/svn/plone/plone.portlets/trunk plone.portlets
Quindi aggiungi quanto segue a buildout.cfg:
[buildout]
...
eggs =
...
plone.portlets
develop =
src/plone.portlets
Nota che:
- L'opzione develop contiene un path relativo verso il punto in cui l'egg sorgente è installato. Buildout si aspetta di trovare un setup.py coerente in questa cartella.
- Gli egg di sviluppo hanno sempre precedenza sugli egg normali.
- Dovrai ancora elencare il nome dell'egg nell'opzione eggs per fare in modo che venga installato.
- Se stai facendo override di un egg che viene distribuito con Plone, potresti doverlo elencare nella sezione eggs della parte [plone] piuttosto:
[buildout]
...
develop =
src/plone.portlets
...
[plone]
recipe = plone.recipe.plone
eggs =
plone.portlets
Questo perchè plone.recipe.plone è molto esplicito riguardo a quali versioni dei suoi vari egg devono essere usate, per fare in modo che Plone venga eseguito nel modo in cui è stato rilasciato.
Le ricette Buildout (come ad esempio plone.recipe.plone) sono distribuite sotto forma di egg. Puoi usare un egg di sviluppo di una ricetta elencandolo sotto l'opzione develop. Non c'e' bisogno di elencarlo esplicitamente sotto l'opzione eggs, dato che è referenziato dall'opzione recipe della parte rilevante.
Gestire file ZCML
E' importante comprendere che Zope non caricherà automaticamente file configure.zcml per i pacchetti che non si trovano nel namespace Products.*. Piuttosto devi referenziare esplicitamente il pacchetto. Buildout può creare tali referenze (note come slug ZCML) con l'opzione zcml sotto la parte [instance]. Ecco come assicurarsi che borg.project sia disponibile in Zope:
[buildout]
...
eggs =
elementtree
borg.project
...
[instance]
...
zcml =
borg.project
Dovessi avere bisogno di caricare un overrides.zcml o un meta.zcml, puoi usare una sintassi come la seguente:
zcml =
some.package
some.package-overrides
some.package-meta
Prodotto Policy
Molti sviluppatori preferiscono creare un singolo "prodotto policy" (noto anche come "prodotto deployment") che orchestra le varie dipendenze. Se hai un tale prodotto potresti voler includere varie dipendenze direttamente dal file configure.zcml del prodotto policy, con righe simili alle seguenti:
<configure xmlns="http://namespace.zope.org/zope">
<include package="borg.project" />
</configure>
In questo caso potresti anche aver bisogno di uno slug (usando l'opzione zcml come sopra descritto) per il prodotto policy.
