web-dev-qa-db-fra.com

Comment copier des modules d'un virtualenv à un autre

Est-il possible de copier python modules d'un virtualenv à un autre.Si alors comment cela est-il fait?

31
bosco-

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
40
Chris Pratt

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.

2
Chris Hanning

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 /

1
xing yang

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.

1
keni