Comment dupliquer virtualenv

131

J'ai un virtualenv existant avec beaucoup de packages mais une ancienne version de Django.

Ce que je veux faire, c'est dupliquer cet environnement donc j'ai un autre environnement avec exactement les mêmes packages mais une version plus récente de Django. Comment puis-je faire ceci?

dolma33
la source
3
Je voudrais geler toutes vos exigences dans un fichier 'requirements.txt' et créer un autre virtualenv et exécuter pip install requirements.txt
Calvin Cheng
Si la version python de l'environnement virtuel que vous souhaitez copier est différente de votre environnement python par défaut, vous pouvez configurer le nouvel environnement en tant que virtualenv -p /path/to/older/venv/bin/python new_venv, puis utiliser le requirements.txtque vous avez généré aprèspip freeze
GiriB

Réponses:

183

Le moyen le plus simple consiste à utiliser pip pour générer un fichier d'exigences. Un fichier d'exigences est essentiellement un fichier qui contient une liste de tous les packages python que vous souhaitez installer (ou que vous avez déjà installés dans le cas d'un fichier généré par pip), et de quelles versions ils se trouvent.

Pour générer un fichier d'exigences, accédez à votre virtualenv d'origine et exécutez:

pip freeze > requirements.txt

Cela générera le fichier requirements.txt pour vous. Si vous ouvrez ce fichier dans votre éditeur de texte préféré, vous verrez quelque chose comme:

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

Maintenant, modifiez la ligne qui dit Django==x.xà dire Django==1.3(ou quelle que soit la version que vous souhaitez installer dans votre nouveau virtualenv).

Enfin, activez votre nouveau virtualenv et exécutez:

pip install -r requirements.txt

Et pip téléchargera et installera automatiquement tous les modules python répertoriés dans votre fichier requirements.txt , quelle que soit la version que vous avez spécifiée!

rdegges
la source
3
Je vous remercie! En cherchant sur Google, j'ai trouvé tellement de pages bruyantes, désordonnées et déroutantes ... Votre solution est si propre et simple ... ça a fait ma journée;)
dolma33
que faire si je copie le dossier puis le colle sur une autre machine? Ça marcherait? En supposant bien sûr que les dépendances apt-get ont été résolues
Tales Pádua
En fait, ce n'est pas le cas, comme je viens de le découvrir.
horcle_buzz
Je vois de nombreux messages. Could not find a version that satisfies the requirement a_package=#.#.#Puis-je le résoudre facilement? J'ai supprimé une ligne ou changé l'égalité en inégalité.
Change-the-world
Fonctionne pyenvaussi pour . Réponse géniale.
Leonard le
29

Une autre option consiste à utiliser virtualenv-clonepackage:

Un script pour cloner un virtualenv non déplaçable.

alecxe
la source
Salut, j'ai raison de supposer que cela me permet de copier un environnement python ENTIER dans un fichier. Ensuite, je devrais simplement charger ce fichier dans un nouvel ordinateur / système d'exploitation et je ferais réinstaller tous les packages de mon site
aceminer
2
"virtualenv-clone source / target /" a fonctionné comme un charme merci!
ajankuv
assurez-vous que nous avons installé virtualenv-cloneaprès avoir activé le virtualenv
4givN
15

virtualenvwrapperfournit une commande pour dupliquer virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME]
Raymond
la source
7
Pas vraiment une bonne idée. "La copie d'environnements virtuels n'est pas bien prise en charge. Chaque virtualenv contient des informations de chemin d'accès codées en dur, et il peut y avoir des cas où le code de copie ne sait pas qu'il doit mettre à jour un fichier particulier. À utiliser avec prudence."
Temak
6

Si vous utilisez Anaconda, vous pouvez simplement exécuter:

conda create --name myclone --clone myenv

Cela copiera myenvdans l'environnement nouvellement créé appelé myclone.

Jordan
la source
4

L'option la plus simple consiste à utiliser le virtualenv-clonepackage.

Pour dupliquer venv1vers venv2, procédez comme suit:

  1. Installez virtualenv-clonedans venv1un environnement virtuel factice ou dans un environnement virtuel factice venv_dummy. Pour créer venv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. Pour installer virtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
  3. Pour dupliquer venv1vers venv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/
Safwan
la source
l'invite dans bash ne change pas, doit éditer bin / activer, et pas 100% clair comment
MrR
@MrR .. vous n'avez pas à modifier bin/activatesi vous suivez cette réponse. Pourquoi devez-vous modifier bin/activate?
Safwan
Après avoir cloné, mon invite dans bash avait le nom de l'environnement d'origine, à cause de la section PS1 dansbin/activate
MrR
1

Ne pouvez-vous pas simplement:

  • Copiez le répertoire d'environnement virtuel existant dans un nouveau
  • Mettre à jour vers le nouveau Django?
Spacedman
la source
7
Parfois, j'utilise cette approche, mais j'ai l'inconvénient de devoir mettre à jour certains chemins dans le script bin / activate.
Armando Pérez Marqués
3
Le changement est-il une simple recherche et remplacement sur les références au nom d'environnement, ou est-ce plus compliqué que cela?
Greg
1
Dans mon cas, la simple mise à jour du chemin dans la constante VIRTUAL_ENV dans bin / activate a fait l'affaire
bryanph
1
D'un autre côté, changer bin / activate est tout un hack, et il faut se demander si cela peut casser des choses à un moment donné. Surtout lorsque les environnements virtuels sont utilisés dans les paramètres de production.
Herbert
2
Cela casse beaucoup de choses. Il est plus facile de simplement recréer ou cloner le virtualenv. J'ai essayé de faire exactement cela (en attendant qu'un serveur proxy s'ouvre pour que je puisse réinstaller tous les packages requis et recommencer à zéro), et cela ne fonctionne pas! Je pensais que j'étais intelligent, mais hélas, il faudra beaucoup de piratage pour que cela soit opérationnel, et honnêtement, il y a beaucoup mieux à faire.
horcle_buzz