2012-01-09 2 views

risposta

0

Di solito si sono in grado di copiare il .egg-info dalla cartella lib/site-packages del virtualenv ai lib/site-packages di altro ambiente.

35

Fintanto che li sta spostando da un virtualenv ad un altro sulla stessa macchina, si potrebbe facilmente basta fare:

$ cp -r [env1]/lib/pythonX.X/site-packages/* [env2]/lib/pythonX.X/site-packages/ 

Tuttavia, se gli ambienti sono su macchine diverse o che utilizzano versioni diverse di Python o qualche altra grande differenza, probabilmente non è una buona idea. In generale, è molto più sicuro per generare un requirements.txt, e quindi utilizzare tale per caricare tutti gli stessi moduli in altro ambiente. È possibile creare il file manualmente, se volete, ma è più facile utilizzare solo pip.

$ pip freeze -E [env1] > requirements.txt 

Oppure, se la vostra virtualenv è già attivato, si può semplicemente fare:

$ pip freeze > requirements.txt 

Poi, nel vostro altro ambiente, si può fare:

$ pip install -E [env2] -r /path/to/requirements.txt 
+0

qualcosa andrà storto se provo a copiare * un * pacchetto come Questo? – Claudiu

+0

Il problema non è nella * quantità * dei pacchetti copiati, ma qualsiasi differenza nelle versioni Python, architetture di sistema, ecc. Tra l'origine e la destinazione. Se la fonte e la destinazione si trovano sulla stessa macchina, si dovrebbe andare bene; se sono su macchine diverse, dovresti usare 'pip freeze'. –

2

sto lavorando una macchina a 64 bit con Ubuntu-14.04-64. Ho compilato e installato python-3.4.3 per /opt/python3.4/ e creato un vitualenv sulla base di questo pitone.

mkvirtualenv -p /opt/python3.4/bin/python venv1 

anche per facilità:

sudo apt-get install virtualenvwrapper 

Con la venv installato e lavorare con PyQt5 con successo (il po 'difficile) più NumPy, SciPy, ipython ecc ho installato virtualenv-clone: ​​

workon myvenv 
pip install virtual-clone 
deactivate 

e poi corse:

virtualenv-clone venv1 venv2 

PyQt5 funziona in questo modo. Il prompt di comandi ancora nomi venv1 come attivo, ma all'interno ~/.virtualenv/venv2

cat activate* | grep "venv1" 

spettacoli 3 voci all'interno dei tre file attivano, activate.csh e Attiva. pesce

Nel attivare, modificare

if [ "x(myvenv1) " != x ] ; then 
     PS1="(myvenv1) $PS1" 
else 

a

... 
     PS1="(myvenv2) $PS1" 
... 

In Attiva.csh cambiamento

if ("venv1" != "") then 
     set env_name = "venv1" 
else 

a

... 
    set env_name = "venv2" 
... 

In activate.fish cambiamento

if test -n "(venv1) " 
     printf "%s%s%s" "(venv1) " (set_color normal) (_old_fish_prompt) 
     return 
end 

a

... 
    printf "%s%s%s" "(venv2) " (set_color normal) (_old_fish_prompt) 
... 

Ora, quando si 012.o workon venv2 il prompt dei comandi visualizzerà correttamente il proprio ambiente (la copia clonata di venv1).

Edit: questo non risponde alla domanda "Come copiare i moduli da un virtualenv ad un altro" ma sono abbastanza sicuro che il risultato è in molti casi quello desiderato, vale a dire la creazione di un nuovo venv base su uno precedentemente creato che include (tutti) i moduli precedentemente installati.

0

sembra che non possiamo semplicemente copiare un virtualenv come un altro. anche se si calcola $ VIRTUAL_ENV nel file di attivazione, funziona ancora come in origine virtualenv e pip installerà tutti i pacchetti in origine siti-pacchetti/