2013-07-18 15 views
9

Il mio server di produzione non ha accesso a Internet, quindi è un po 'un disastro copiare tutte le dipendenze dalla mia macchina di sviluppo al server di produzione/sviluppo.Implementazione Python con virtualenv (su un server senza accesso a Internet)

Se usassi virtualenv, avrei tutte le mie dipendenze in questo ambiente. In questo modo sarei anche in grado di distribuirlo su qualsiasi macchina, che ha python & virtualenv installato.

Ma l'ho visto raramente, e sembra un po 'sporco. Sto sbagliando e questa potrebbe essere una buona pratica, o ci sono altri modi per risolverlo bene?

+0

'virtualenv' non consente di distribuire le dipendenze su altre macchine. si può prendere in considerazione 'fabric' (http://fabfile.org) o uno script' bash' per farlo. 'virtualenv' è ottimo per isolare gli ambienti di sviluppo, ad es. per adattarsi ai tuoi ambienti di produzione. – furins

+0

Puoi provare la funzione di bootstrap che virtualenv ha da offrire, vedi qui per un esempio https://github.com/socialplanning/fassembler/blob/master/fassembler/create-venv-script.py – woozyking

risposta

5

tre opzioni vorrei prendere in considerazione:

  1. eseguire il proprio PyPI mirror con le dipendenze si ha bisogno. È davvero solo bisogno di costruire il layout del file ed estrarre dal server locale utilizzando il flag index-url:

    $ pip install --index-url http://pypi.beastcraft.net/ numpy

  2. virtualenvs si basano sulla stessa architettura e copiare quelli oltre, se necessario.

    Questo funziona, ma si sta assumendo un rischio sulla portabilità reale.

  3. Usa terrarium per costruire ambienti virtuali quindi portare gli over (in pratica l'opzione 2, ma con semplice contabilità/automazione).

Ho fatto tutto questo e penso che ospitare il proprio mirror PyPI sia l'opzione migliore. Ti dà la massima flessibilità quando esegui un'implementazione o provi un nuovo codice.

+0

C'è un lato negativo di ospitare il proprio mirror rispetto alle altre due opzioni. Se si dispone di dipendenze in conflitto/condivisione, è necessario ospitare nella stessa casella di cui si avrà bisogno/desidera un qualche tipo di ambiente virtuale. – cmd