So duplizieren Sie virtualenv


129

Ich habe eine vorhandene virtuelle Umgebung mit vielen Paketen, aber einer alten Version von Django.

Ich möchte diese Umgebung duplizieren, damit ich eine andere Umgebung mit genau denselben Paketen, aber einer neueren Version von Django habe. Wie kann ich das machen?


3
Ich würde alle Ihre Anforderungen in eine 'require.txt'-Datei einfrieren und eine weitere virtuelle Umgebung erstellen und pip installquirements.txt ausführen
Calvin Cheng

Wenn sich die Python-Version der virtuellen Umgebung, die Sie kopieren möchten, von Ihrer Standard-Python-Umgebung unterscheidet, können Sie die neue Umgebung als virtualenv -p /path/to/older/venv/bin/python new_venvrequirements.txtpip freeze
einrichten

Antworten:


182

Am einfachsten ist es, mit pip eine Anforderungsdatei zu generieren. Eine Anforderungsdatei ist im Grunde eine Datei, die eine Liste aller Python-Pakete enthält, die Sie installieren möchten (oder bei einer von pip generierten Datei bereits installiert haben), und welche Versionen sie haben.

Um eine Anforderungsdatei zu generieren, rufen Sie Ihre ursprüngliche virtuelle Umgebung auf und führen Sie Folgendes aus:

pip freeze > requirements.txt

Dadurch wird die Erzeugung requirements.txt Datei für Sie. Wenn Sie diese Datei in Ihrem bevorzugten Texteditor öffnen, sehen Sie Folgendes:

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

Nun bearbeiten die Zeile , die sagt Django==x.xzu sagen Django==1.3(oder was auch immer Version möchten Sie in Ihrem neuen virtualenv installieren).

Zuletzt aktivieren Sie Ihre neue virtuelle Umgebung und führen Sie Folgendes aus:

pip install -r requirements.txt

Und pip wird automatisch heruntergeladen und alle das Python - Module in Ihrer aufgelistet installiert requirements.txt Datei, egal auf welchen Versionen von Ihnen angegebenen!


3
Danke dir! Während ich googelte, fand ich so viele verrauschte, unordentliche und verwirrende Seiten ... Ihre Lösung ist so sauber und einfach ... es machte meinen Tag;)
dolma33

Was ist, wenn ich den Ordner kopiere und dann auf einem anderen Computer einfüge? Es würde funktionieren? Vorausgesetzt natürlich, die Apt-Get-Abhängigkeiten wurden gelöst
Tales Pádua

In der Tat nicht, wie ich gerade herausfinde.
horcle_buzz

Ich sehe viele Nachrichten Could not find a version that satisfies the requirement a_package=#.#.#Kann ich es leicht lösen? Ich habe eine Zeile entfernt oder die Gleichheit in die Ungleichung geändert.
Change-the-World

Funktioniert auch für pyenv. Tolle Antwort.
Leonard

29

Eine andere Option ist die Verwendung von virtualenv-clonepackage:

Ein Skript zum Klonen einer nicht verschiebbaren virtuellen Umgebung.


Hallo, kann ich zu Recht davon ausgehen, dass ich damit eine GANZE Python-Umgebung in eine Datei kopieren kann? Dann müsste ich nur diese Datei in einen neuen Computer / Betriebssystem laden und ich würde alle meine Site-Pakete zurück installieren
aceminer

2
"virtualenv-clone source / target /" hat wie ein Zauber funktioniert, danke!
Ajankuv

virtualenv-cloneStellen
Sie

15

virtualenvwrapperbietet einen Befehl zum Duplizieren von virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME]

7
Keine wirklich gute Idee. "Das Kopieren virtueller Umgebungen wird nicht gut unterstützt. In jede virtuelle Umgebung sind Pfadinformationen fest codiert, und es kann Fälle geben, in denen der Kopiercode nicht weiß, dass eine bestimmte Datei aktualisiert werden muss. Mit Vorsicht verwenden."
Temak


4

Die einfachste Option ist die Verwendung eines virtualenv-clonePakets.

Gehen Sie folgendermaßen venv1vor venv2, um zu duplizieren :

  1. Installieren Sie virtualenv-clonein einer venv1oder einer virtuellen Dummy-Umgebung venv_dummy. So erstellen Sie venv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. So installieren Sie virtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
  3. Duplizieren venv1zu venv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/

Die Eingabeaufforderung in Bash ist nicht geändert, muss bin / aktivieren bearbeiten und nicht 100% klar wie
MrR

@ MrR .. Sie müssen nicht bearbeiten, bin/activatewenn Sie dieser Antwort folgen. Warum musst du bearbeiten bin/activate?
Safwan

Nachdem ich geklont habe, hatte meine Eingabeaufforderung in bash aufgrund des PS1-Abschnitts inbin/activate
MrR

1

Kannst du nicht einfach:

  • Kopieren Sie das vorhandene virtuelle env-Verzeichnis in ein neues
  • Update auf den neuen Django?

7
Manchmal verwende ich diesen Ansatz, habe aber die Unannehmlichkeit, einige Pfade innerhalb des bin / enable-Skripts aktualisieren zu müssen.
Armando Pérez Marqués

3
Ist die Änderung ein einfaches Suchen und Ersetzen von Verweisen auf den env-Namen oder ist sie komplizierter?
Greg

1
In meinem Fall hat das einfache Aktualisieren des Pfads in der Konstante VIRTUAL_ENV in bin /
activ

1
Auf der anderen Seite ist das Ändern von bin / enable ein ziemlicher Hack, und man muss sich fragen, ob dies irgendwann etwas kaputt machen kann. Insbesondere, wenn virtuelle Umgebungen in Produktionseinstellungen verwendet werden.
Herbert

2
Es bricht viele Dinge. Es ist einfacher, die virtuelle Umgebung einfach neu zu erstellen oder zu klonen. Ich habe versucht, genau dies zu tun (während ich darauf wartete, dass ein Proxyserver geöffnet wird, damit ich alle erforderlichen Pakete neu installieren und einfach von vorne anfangen kann), und es funktioniert nicht! Ich dachte, ich wäre schlau, aber leider wird es eine Menge Hacking erfordern, um dies zum Laufen zu bringen, und ehrlich gesagt gibt es viel bessere Dinge zu tun.
horcle_buzz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.