2013-02-04 4 views
19

Sono nuovo per virtualenv, ma sto scrivendo app django e finalmente dovrò distribuire in qualche modo.Come esportare virtualenv?

Quindi supponiamo di avere la mia app funzionante sul mio virtualenv locale dove ho installato tutte le librerie richieste. Quello che voglio fare ora è eseguire una sorta di script, che richiederà il mio virtualenv, controllare cosa è installato all'interno e produrre uno script che installerà tutte queste librerie su virtualenv nuovo su un'altra macchina. Come questo può essere fatto? Per favore aiuto.

risposta

48

Non si copia incolla il proprio virtualenv. Si esporta l'elenco di tutti i pacchetti installati come -

pip freeze > requirements.txt 

Poi spingere il file requirements.txt ovunque si desidera distribuire il codice, e poi basta fare quello che hai fatto sulla macchina dev -

$ virtualenv <env_name> 
$ source <env_name>/bin/activate 
(<env_name>)$ pip install -r path/to/requirements.txt 

E lì hai tutti i tuoi pacchetti installati con la versione esatta.

si può anche guardare in Fabric per automatizzare questo compito, con una funzione come questa -

def pip_install(): 
    with cd(env.path): 
     with prefix('source venv/bin/activate'): 
      run('pip install -r requirements.txt') 
+0

Abbastanza corretto, ma è un peccato che non ci sia alcun comando e integrazione di fabric dedicati;) – mnowotka

+1

Ho appena aggiunto del tessuto alla risposta. Puoi facilmente scrivere una funzione tessuto per fare lo stesso. Poche righe di codice. –

+0

Aggiunta una funzione di esempio per iniziare. –

0

Se sta per essere sulla stessa strada si può tar e estrarlo su un'altra macchina. Se tutte le stesse dipendenze, le librerie ecc. Sono disponibili sul computer di destinazione, funzioneranno.

0

È possibile installare e provare virtualenvwrapper cpvirtualenv, ma gli sviluppatori consigliare cautela qui:

Attenzione

Copia di ambienti virtuali non è ben supportato. Ogni virtualenv contiene delle informazioni sul percorso in esso codificate e in alcuni casi il codice di copia non sa che è necessario aggiornare un determinato file. Utilizzare con cautela.

Non l'ho ancora testato abbastanza, ma aggiornerò qui dopo so quanto bene (o male) funziona.