Est-il possible de copier python modules d'un virtualenv à un autre.Si alors comment cela est-il fait?
Tant que vous les déplacez d'un virtualenv à un autre sur la machine pareil, vous pouvez facilement faire:
$ cp -r [env1]/lib/pythonX.X/site-packages/* [env2]/lib/pythonX.X/site-packages/
Toutefois, si les environnements sont sur différentes machines ou utilisent différentes versions de python ou une autre différence majeure, ce n'est probablement pas une bonne idée. En général, il est beaucoup plus sûr de générer un requirements.txt
, puis utiliser cela pour charger tous les mêmes modules de l'autre environnement. Vous pouvez créer le fichier manuellement si vous le souhaitez, mais il est plus facile d'utiliser simplement pip
.
$ pip freeze -E [env1] > requirements.txt
Ou, si votre Virtualenv est déjà activé, vous pouvez simplement faire:
$ pip freeze > requirements.txt
Ensuite, dans votre autre environnement, vous pouvez faire:
$ pip install -E [env2] -r /path/to/requirements.txt
Je travaille sur une machine 64 bits avec Ubuntu-14.04-64. J'ai compilé et installé Python-3.4.3 à / opt/python3.4 / et créé un Vitalualenv basé sur ce python.
mkvirtualenv -p /opt/python3.4/bin/python venv1
Aussi facilité:
Sudo apt-get install virtualenvwrapper
Avec le VENV installé et travaillant avec PYQT5 avec succès (le bit dur) plus numpy, Scipy, Ipython, etc. J'ai installé Virtualenv-Clone:
workon myvenv
pip install virtual-clone
deactivate
puis a couru:
virtualenv-clone venv1 venv2
Pyqt5 fonctionne de cette façon. L'invite de ligne de commande Noms toujours -VENV1 comme actif mais dans ~/.virtualenvenv/vénv2
cat activate* | grep "venv1"
affiche 3 entrées dans les trois fichiers activez, activate.csh, et activate.fish
En activant, changez
if [ "x(myvenv1) " != x ] ; then
PS1="(myvenv1) $PS1"
else
à
...
PS1="(myvenv2) $PS1"
...
Dans activate.csh changement
if ("venv1" != "") then
set env_name = "venv1"
else
à
...
set env_name = "venv2"
...
Dans activez.fish changement
if test -n "(venv1) "
printf "%s%s%s" "(venv1) " (set_color normal) (_old_fish_Prompt)
return
end
à
...
printf "%s%s%s" "(venv2) " (set_color normal) (_old_fish_Prompt)
...
Maintenant quand vous source ~/.virtualenv/venv2/bin/activate
ou workon venv2
L'invite de commande affiche correctement votre environnement (la copie clonée de VENV1).
Edit: cela ne répond pas à la question "Comment copier des modules d'un virtualenv à un autre" Mais je suis sûr que le résultat est dans de nombreux cas, le souhaité souhaité, à savoir la création d'un nouveau Venv Basé sur un précédemment créé, qui comprend (tous) les modules précédemment installés.
on dirait que nous ne pouvons pas simplement copier un virtualenv comme un autre. Même vous chnage le $ virtual_env dans le fichier Activate, il agit toujours comme dans l'origine Virtualenv et PIP installera tous les packages sur les packages de site d'origine /
Habituellement, vous êtes capable de copier les informations .EGG à partir du dossier LIB/SITE-PACKAGES du Virtualenv sur les packages lib/sites de l'autre environnement.