[Python] Virtualenv vs. buildout

Alan Franzoni mailing a franzoni.eu
Ven 23 Mar 2012 11:40:41 CET


On 03/23/2012 11:27 AM, Alessandro Dentella wrote:

> In passato ho usato normalmente virtualenv ma vorrei analizzare anche
> buildout. Ho letto un po' di documentazione del sito e di Jacob Kaplan-Moss
> e visto qualche video. Mi piacerebbe avere anche qualche parere da chi li
> usa entrambi prima di sposare una delle due soluzioni.

Io li ho usati entrambi, e, a mio parere, sono due strumenti *molto*
diversi.

virtualenv è ottimo per creare un ambiente isolato per un prototyping
rapido, o per mantenersi diversi ambienti con diverse librerie per
diverse applicazioni, ma richiede di fare un sacco di lavoro manuale
(devi installarti a mano le dipendenze in ogni ambiente) oppure di
customizzare il tuo ambiente usando un sacco di hook, che sono "semplice
python" -> possono diventare più complicati. Se il tuo scopo è gestire
il lavoro in un team, in maniera che ciascuno sviluppatore possa
rapidamente mettersi a lavorare, potrebbe non essere lo strumento migliore.


zc.buildout è uno strumento di deploy, nel senso che ti permette di
creare una configurazione abbastanza "dichiarativa" per il tuo progetto,
scarica le dipendenze, fa il setup dei path, degli script che vuoi
lanciare, ecc.

Detto questo: zc.buildout, IMHO, è ancora acerbo e pure un po' stronzo.
Ogni tanto di dà degli errori la cui utilità è pari a quella di un buco
in testa ( tipo "AssertionError: path "/hello/world" contains "/" ),
tende (o tendeva, è un po' di mesi che non lo uso) a rompersi con
aggiornamenti di librerie o dello stesso pacchetto zc.buildout, e non è
proprio semplice da capire, perlomeno all'inizio. Ma una parte di questi
problemi sono legati proprio al dependency management su Python, che fa
parecchio schifo.

L'alternativa a virtualenv "barebone" è usare tox
http://pypi.python.org/pypi/tox , che è uno strumento nato per il
testing ma che in realtà può essere usato per ricreare dei virtualenv
opportunamente configurati. L'ho usato poco e solo per il testing, ma mi
sembrava carino, ed è IMHO più intuitivo rispetto a zc.buildout, ti
raccomanderei di darci un'occhiata prima di fare la tua scelta.


-- 
Latest blog post: Deploying WAR on Heroku http://t.co/M4krW2Mu
contact me at public@[mysurname].eu


Maggiori informazioni sulla lista Python