2011-09-15 17 views
78

Ho un ambiente esistente in virtualenv, con molti pacchetti, ma una vecchia versione di Django.Duplicate virtualenv

Cosa succede se voglio duplicare questo ambiente,
così posso avere un altro ambiente in cui è possibile installare una versione più recente Django,
ma mantenendo tutti i pacchetti che sono già in un altro ambiente?

+3

avrei pip congelare tutte le vostre esigenze in un file 'requirements.txt' e creare un altro virtualenv ed eseguire pip installare requirements.txt –

+0

Se la versione pitone del virtuale l'ambiente che vuoi copiare è diverso dal tuo ambiente python predefinito, puoi configurare il nuovo ambiente come 'virtualenv -p/path/to/older/venv/bin/python new_venv' e quindi usare' requisiti.txt' che tu generato dopo 'pip freeze' – GiriB

risposta

116

Il modo più semplice è utilizzare pip per generare un file di requisiti. Un file dei requisiti è fondamentalmente un file che contiene un elenco di tutti i pacchetti python che si desidera installare (o che sono già stati installati in caso di file generato da pip) e in quali versioni sono disponibili.

per generare un file requisiti, entra nella tua virtualenv originale, ed eseguire:

pip freeze > requirements.txt 

Questo genererà il file direquirements.txt per voi. Se si apre il file in un editor di testo, vedrete qualcosa di simile:

Django==1.3 
Fabric==1.0.1 
etc... 

Ora, modificare la riga che dice Django==x.x dire Django==1.3 (o qualunque versione che si desidera installare nel vostro nuovo virtualenv) .

Infine, attivare la nuova virtualenv, ed eseguire:

pip install -r requirements.txt 

e PIP verrà scaricare e installare tutti i moduli Python elencati nel file requirements.txt, a qualunque versioni specificate automaticamente!

+1

Grazie! Mentre ho cercato su Google ho trovato così tante pagine rumorose, disordinate e confuse ... La tua soluzione è così semplice e pulita ... ha reso la mia giornata;) – dolma33

+0

cosa succede se copio la cartella e la incollo su un'altra macchina? Funzionerebbe? Supponendo ovviamente che le dipendenze di apt-get siano state risolte –

+0

Non funzionerebbe =) – rdegges

2

si fa a non semplicemente:

  • Copiare la directory ENV virtuale esistente ad uno nuovo
  • Update per il nuovo Django?
+5

Alcune volte utilizzo questo approccio, ma ho l'inconveniente di dover aggiornare alcuni percorsi all'interno del cestino/attivare lo script. –

+3

La modifica è una semplice ricerca e sostituzione sui riferimenti al nome di env o è più complicata di così? – Greg

+1

Nel mio caso, semplicemente aggiornare il percorso nella costante VIRTUAL_ENV in bin/activate ha fatto il trucco – bryanph

17

Un'altra opzione è quella di utilizzare virtualenv-clone pacchetto:

Uno script per clonare un virtualenv non rilocabile.

+0

Ciao, ho ragione di presumere che questo mi permette di copiare un ambiente python INTERO in un file. Quindi dovrei solo caricare questo file in un nuovo computer/sistema operativo e riavrei tutti i pacchetti del mio sito installati – aceminer

8

virtualenvwrapper offre invece una command to duplicate virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME] 
+0

Non proprio una buona idea. "La copia degli ambienti virtuali non è ben supportata.In ogni virtualenv sono incorporate delle informazioni sul percorso e potrebbero esserci casi in cui il codice della copia non sa che è necessario aggiornare un determinato file. Usare con cautela." – Temak