Come duplicare virtualenv


130

Ho un virtualenv esistente con molti pacchetti ma una vecchia versione di Django.

Quello che voglio fare è duplicare questo ambiente, quindi ho un altro ambiente con gli stessi pacchetti esatti ma una versione più recente di Django. Come posso fare questo?


3
Vorrei pipare tutti i tuoi requisiti in un file 'requisito.txt' e creare un altro virtualenv ed eseguire pip install Requisiti.txt
Calvin Cheng

Se la versione di Python dell'ambiente virtuale che si desidera copiare è diversa dall'ambiente di Python predefinito, è possibile impostare il nuovo ambiente come virtualenv -p /path/to/older/venv/bin/python new_venve quindi utilizzare requirements.txtquello generato in seguitopip freeze
GiriB

Risposte:


183

Il modo più semplice è usare 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 hanno già installato in caso di file generato da pip) e in quali versioni si trovano.

Per generare un file dei requisiti, vai al tuo virtualenv originale ed esegui:

pip freeze > requirements.txt

Questo genererà il file requisito.txt per te. Se apri quel file nel tuo editor di testo preferito, vedrai qualcosa del tipo:

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

Ora, modifica la riga che dice Django==x.xdi dire Django==1.3(o qualunque versione tu voglia installare nella tua nuova virtualenv).

Infine, attiva il tuo nuovo virtualenv ed esegui:

pip install -r requirements.txt

E pip scaricherà e installerà automaticamente tutti i moduli Python elencati nel tuo file requisito.txt , a qualunque versione tu abbia specificato!


3
Grazie! Mentre cercavo su google ho trovato così tante pagine rumorose, disordinate e confuse ... La tua soluzione è così pulita e semplice ... mi ha reso la giornata;)
dolma33

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

In effetti no, come sto scoprendo proprio ora.
horcle_buzz,

Vedo molti messaggi Could not find a version that satisfies the requirement a_package=#.#.#Posso risolverlo facilmente? Ho rimosso una linea o modificato l'uguaglianza in disuguaglianza.
Cambia il mondo il

Funziona anche per pyenv. Risposta fantastica.
Leonard, il

29

Un'altra opzione è usare il virtualenv-clonepacchetto:

Uno script per clonare un virtualenv non trasferibile.


Ciao, ho ragione a supporre che ciò mi consenta di copiare un intero ambiente Python in un file. Quindi dovrei solo caricare questo file in un nuovo computer / sistema operativo e ottenere tutti i pacchetti del mio sito installati di nuovo
aceminer

2
"virtualenv-clone source / target /" ha funzionato come un incantesimo grazie!
Ajankuv,

assicurati di aver installato virtualenv-clonedopo aver attivato virtualenv
4givN il

15

virtualenvwrapperfornisce un comando per duplicare virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME]

7
Non proprio una buona idea. "La copia di ambienti virtuali non è ben supportata. Ogni virtualenv ha informazioni sul percorso codificate in esso, e possono esserci casi in cui il codice di copia non sa che è necessario aggiornare un determinato file. Usare con cautela."
Temak,

5

Se stai usando Anaconda puoi semplicemente eseguire:

conda create --name myclone --clone myenv

Questo verrà copiato myenvnell'ambiente appena creato chiamato myclone.


4

L'opzione più semplice è usare il virtualenv-clonepacchetto.

Per duplicare venv1in venv2, attenersi alla seguente procedura:

  1. Installa virtualenv-clonein uno venv1o in un ambiente virtuale fittizio venv_dummy. Per creare venv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. Per installare virtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
  3. Per duplicare venv1in venv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/

il prompt in bash non è modifiche, è necessario modificare bin / attivare e non chiarire al 100% come
MrR

@MrR .. non devi modificare bin/activatese segui questa risposta. Perché devi modificare bin/activate?
Safwan,

Dopo aver clonato, il mio prompt in bash aveva il nome dell'ambiente originale, a causa della sezione PS1 all'internobin/activate
MrR

1

Non puoi semplicemente:

  • Copia la directory env virtuale esistente in una nuova
  • Aggiornamento al nuovo Django?

7
Alcune volte uso questo approccio, ma ha l'inconveniente di dover aggiornare alcuni percorsi all'interno dello script bin / activ.
Armando Pérez Marqués,

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

1
Nel mio caso, semplicemente aggiornando il percorso nella costante VIRTUAL_ENV in bin /
activ ha

1
D'altra parte, cambiare bin / activare è piuttosto un trucco, e ci si deve chiedere se questo può spezzare cose ad un certo punto. Soprattutto quando vengono utilizzati ambienti virtuali nelle impostazioni di produzione.
Herbert,

2
Rompere molte cose. È più semplice ricreare o clonare virtualenv. Ho provato a fare proprio questo (mentre aspettavo che si aprisse un server proxy in modo da poter reinstallare tutti i pacchetti richiesti e ricominciare da zero), e non funziona! Pensavo di essere intelligente, ma ahimè, ci vorrà un sacco di hacking per farlo funzionare e, onestamente, ci sono cose molto migliori da fare.
horcle_buzz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.