È possibe copiare moduli Python da un virtualenv a another.If così come è questo fatto?come copiare i moduli da un virtualenv all'altro
risposta
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.
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
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.
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/
qualcosa andrà storto se provo a copiare * un * pacchetto come Questo? – Claudiu
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'. –