Stiamo sviluppando un sistema per un cliente che non vuole consentire l'installazione di pacchetti da repository esterni. Il progetto è in Python e definisce le sue dipendenze tramite setuptools
; la maggior parte di queste dipendenze si trova su PyPI e altre sono reperibili nel repository della nostra azienda. Alcuni di essi richiedono la presenza di librerie di sistema (ad esempio libevent
per gevent
). Nessuno di questi può essere installato (come download diretto dal repository) nei server del cliente.
Al momento, stiamo impacchettando il progetto, le sue dipendenze e in modo ricorsivo tutte le dipendenze delle sue dipendenze, in RPM, che raggruppiamo in un unico tarball di distribuzione. Questa operazione richiede molto tempo ed è soggetta a errori. Inoltre, non abbiamo realmente bisogno del controllo delle versioni, dal momento che il progetto è un servizio e il codice cliente non può scegliere quale versione del servizio con cui parla. Dovremmo solo spedire l'ultima versione una volta che sappiamo che è stabile.
L'alternativa principale che ho preso in considerazione è buildout : crea il progetto in una macchina di gestione temporanea con lo stesso sistema operativo e interprete come macchina di produzione, quindi tar l'intera directory e copia nella macchina di produzione. Ma non sono sicuro che questo sarebbe davvero un miglioramento rispetto all'attuale metodo di distribuzione.
Quali altre opzioni ci sono? Quale è stato usato con successo? C'è qualche tipo di best practice per la comunità qui?