Gestire i propri progetti con zc.buildout

Una normale giornata di lavoro alla scoperta dell'acqua calda.

Gestire tutto Plone senza zc.buildout non se lo sognerebbe ormai nessuno; troppe cose da installare e configurare, troppe dipendenze da soddisfare e soprattutto troppe possibilità in più cui rinunciare.

Oggi però mi è capitato di non dover usare né Zope né Plone bensì sviluppare un semplice pacchetto python. Tale pacchetto ha qualche dipendenza particolare da gestire e non vorrei ogni volta dovermi ricordare quali siano.

Ecco l'occasione giusta per leggere un po' di cose riguardanti zc.buildout.

Parto dalla creazione di un ambiente virtuale appropriato:

$ virtualenv -p /usr/bin/python2.4 progetto_x
$ cd progetto_x
$ source bin/activate

passo quindi alla creazione di un buildout minimale a partire dalla directory buildout.

$ mkdir buildout
$ cd buildout

ora scarico il file bootstrap.py direttamente da zope.org e creo il file di configurazione:

$ wget http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py
$ vim buildout.cfg

ecco qui di seguito cosa contiene il mio file di configurazione del buildout:

[buildout]
# il buildout inizia, come tutti i buildout, con la definizione delle varie
# sezioni da includere
parts =
reportlab
base-eggs
interpreter

# mi serve mr.developer per scaricare il mio pacchetto dal repository
# cfr. http://pypi.python.org/pypi/mr.developer
extensions = mr.developer
sources = sources
auto-checkout = my_egg

# devo includere il path di reportlab nel mio interprete
extra_paths =
parts/reportlab

# questa sezione scarica semplicemente gli eggs di cui ho bisogno
[base-eggs]
recipe = zc.recipe.egg:eggs
eggs =
MySQL-python
PIL
sqlalchemy
my_egg

# attraverso questa recipe viene scaricato reportlab v.2.0
[reportlab]
recipe = gocept.download
url = http://www.reportlab.org/ftp/ReportLab_2_0.tgz
md5sum = 0de80cdf310dac692ba6ea02beb4481b

# mi creo un interprete python con la configurazione corretta presa dal buildout
[interpreter]
recipe = zc.recipe.egg
eggs = ${base-eggs:eggs}
extra-paths = ${buildout:extra_paths}
interpreter = py
scripts = py

# in ultimo definisco il repository del mio pacchetto
[sources]
my_egg = svn http://url.del.mio.pacchetto

Non mi rimane che eseguire il buildout come sempre:

$ python2.4 bootstrap.py
$ ./bin/buildout

ed il gioco è fatto.

blog comments powered by Disqus