Gibt es eine Möglichkeit, die in einer virtuellen Umgebung verwendete Python-Version zu aktualisieren (z. B. wenn eine Bugfix-Version herauskommt)?
Ich könnte pip freeze --local > requirements.txt
dann das Verzeichnis entfernen und pip install -r requirements.txt
, aber dies erfordert zum Beispiel eine große Neuinstallation großer Bibliotheken numpy
, die ich häufig benutze.
Ich kann sehen, dass dies ein Vorteil beim Upgrade von z. B. 2.6 -> 2.7 ist, aber was ist mit 2.7.x -> 2.7.y?
python
version
virtualenv
pip
Simon Walker
quelle
quelle
Antworten:
Hast du das ? Wenn ich diese Antwort nicht falsch verstanden habe, können Sie versuchen, eine neue virtuelle Umgebung über der alten zu erstellen. Sie müssen nur wissen, welcher Python Ihre virtualenv verwenden wird (Sie müssen Ihre virtualenv-Version sehen).
Wenn Ihr virtualenv mit derselben Python-Version wie das alte installiert ist und ein Upgrade Ihres virtualenv-Pakets nicht möglich ist, können Sie dies lesen , um ein virtualenv mit der gewünschten Python-Version zu installieren.
BEARBEITEN
Ich habe diesen Ansatz getestet (der, der eine neue virtuelle Umgebung über der alten erstellt), und er hat für mich gut funktioniert. Ich denke, Sie können einige Probleme haben, wenn Sie von Python 2.6 auf 2.7 oder 2.7 auf 3.x wechseln, aber wenn Sie nur innerhalb derselben Version aktualisieren (bei 2.7 bleiben, wie Sie möchten), sollten Sie kein Problem haben, da alle Pakete werden für beide Python-Versionen in denselben Ordnern gespeichert (2.7.x- und 2.7.y-Pakete befinden sich in your_env / lib / python2.7 /).
Wenn Sie Ihre Virtualenv-Python-Version ändern, müssen Sie alle Ihre Pakete für diese Version erneut installieren (oder verknüpfen Sie einfach die benötigten Pakete mit dem Ordner für die neuen Versionspakete, dh: your_env / lib / python_newversion / site-packages).
quelle
virtualenv
über dem alten zu erstellen , und es hat funktioniert. Ich musste angeben-p
, um auf die richtige Version von Python zu verweisen.Wenn Sie zufällig das mit Python 3.3+ gelieferte venv-Modul verwenden, wird eine
--upgrade
Option unterstützt . Gemäß den Dokumenten :quelle
venv
und sich weigerten, es auf der Grundlage zu reparieren, dass "Sie einfach virtualenv verwenden könnten". EDIT: Eigentlich funktioniert es! Es wird nur eine Fehlermeldung zu "surepip" angezeigt.python3.6 -m venv --upgrade <path_of_existing_env>
bin/python
undbin/python3
immer noch mit der altenpython3.4
Binärdatei verknüpft, musste ich die Verknüpfungen manuell einstellen. Gibt es auch eine Möglichkeit , die jetzt veraltete Python-Version zu entfernen ?Error: Command '['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
> was bedeutet das? Ich sehe keine aktiven Python-Prozesse, kann nicht aktualisieren.python3.6 -m venv --upgrade ENV_DIR
damit es funktioniert. Ich denke, ich muss noch einige symbolische Links in aktualisierenENV_DIR/bin
. Daher bestand der Trick darin, mit der neuen Python-Version zu aktualisieren, während die alte Version noch installiert war.Erneut aktualisiert: Die folgende Methode funktioniert möglicherweise nicht in neueren Versionen von virtualenv. Bevor Sie versuchen, Änderungen an der alten virtuellen Umgebung vorzunehmen, sollten Sie die Abhängigkeiten in einer Anforderungsdatei (
pip freeze > requirements.txt
)speichernund an einer anderen Stelle sichern. Wenn etwas schief geht, können Sie trotzdem eine neue virtuelle Umgebung erstellen und die alten Abhängigkeiten darin installieren (pip install -r requirements.txt
).Aktualisiert: Ich habe die Antwort 5 Monate nach meiner ursprünglichen Antwort geändert. Die folgende Methode ist bequemer und robuster.
Nebeneffekt: Es behebt auch die
Symbol not found: _SSLv2_method
Ausnahme, wenn Sie diesimport ssl
in einer virtuellen Umgebung nach dem Upgrade von Python auf Version 2.7.8 tun.Hinweis: Derzeit ist dies für Python 2.7.x nur .
Wenn Sie Homebrew Python unter OS X verwenden, zuerst
deactivate
alle virtuellen Geräte und dann Python aktualisieren:Führen Sie die folgenden Befehle aus (
<EXISTING_ENV_PATH>
ist der Pfad Ihrer virtuellen Umgebung):Erstellen Sie abschließend Ihre virtuelle Umgebung neu:
Auf diese Weise werden alte Python-Kerndateien und Standardbibliotheken (plus
setuptools
undpip
) entfernt, während die in installierten benutzerdefinierten Bibliothekensite-packages
erhalten bleiben und funktionieren, sobald sie in reinem Python vorliegen. Binäre Bibliotheken müssen möglicherweise neu installiert werden, damit sie ordnungsgemäß funktionieren.Dies funktionierte für mich in 5 virtuellen Umgebungen mit installiertem Django.
Übrigens, wenn
./manage.py compilemessages
es danach nicht funktioniert, versuchen Sie Folgendes:quelle
bin/python
Datei.setuptools
undpip
erforderlich.<EXISTING_ENV_PATH>/.Python
da dies die Erstellung von virtualenv brach.rmvirtualenv <env_name>
und alle damit verbundenen Abhängigkeiten entfernen :) Weitere Informationen finden Sie unterIch konnte keine neue virtuelle Umgebung über der alten erstellen. Es gibt jedoch Tools in Pip, mit denen sich die Anforderungen in einem brandneuen Venv viel schneller wieder installieren lassen. Pip kann jedes der Elemente in Ihrer Anforderung.txt in ein Radpaket einbauen und in einem lokalen Cache speichern. Wenn Sie ein neues venv erstellen und pip install darin ausführen, verwendet pip automatisch die vorgefertigten Räder, wenn es sie findet. Die Räder werden für jedes Modul viel schneller installiert als die Ausführung von setup.py.
Meine ~ / .pip / pip.conf sieht folgendermaßen aus:
Ich installiere Wheel (
pip install wheel
) und renne dannpip wheel -r requirements.txt
. Dadurch werden die gebauten Räder im Radverzeichnis in meiner pip.conf gespeichert.Von da an werden diese Anforderungen jedes Mal, wenn ich sie installiere, von den Rädern aus installiert, was ziemlich schnell geht.
quelle
So aktualisieren Sie die Python-Version für ein vorhandenes virtualenvwrapper-Projekt und behalten den gleichen Namen bei
Ich füge eine Antwort für jeden hinzu, der Doug Hellmanns hervorragenden virtuellen Envwrapper verwendet, insbesondere weil die vorhandenen Antworten dies nicht für mich getan haben.
Ein Kontext:
python3 -m venv
, aber es unterstützt keine Python 2-Umgebungenmkproject
starte , verwende ich, das die virtuelle Umgebung erstellt, ein leeres Projektverzeichnis erstellt und CDs darin erstelltworkon
Befehl virtualenvwrapper verwenden , um jedes Projekt unabhängig von der Python-Version zu aktivierenRichtungen:
Angenommen, Ihr vorhandenes Projekt hat den Namen
foo
und führt derzeit Python 2 (mkproject -p python2 foo
) aus. Die Befehle sind jedoch dieselben, unabhängig davon, ob Sie ein Upgrade von 2.x auf 3.x, 3.6.0 auf 3.6.1 usw. durchführen. Ich gehe auch davon aus, dass Sie Sie befinden sich derzeit in der aktivierten virtuellen Umgebung.1. Deaktivieren und entfernen Sie die alte virtuelle Umgebung:
Beachten Sie, dass Sie, wenn Sie den Hooks benutzerdefinierte Befehle hinzugefügt haben (z. B.
bin/postactivate
), diese speichern müssen, bevor Sie die Umgebung entfernen.2. Verstecken Sie das eigentliche Projekt in einem temporären Verzeichnis:
3. Erstellen Sie die neue virtuelle Umgebung (und das Projektverzeichnis) und aktivieren Sie:
4. Ersetzen Sie das leere generierte Projektverzeichnis durch ein reales Projekt und wechseln Sie zurück in das Projektverzeichnis:
5. Installieren Sie die Abhängigkeiten neu, bestätigen Sie die neue Python-Version usw.:
Wenn dies ein häufiger Anwendungsfall ist, werde ich in Betracht ziehen, eine PR zu öffnen, um so etwas wie
$ upgradevirtualenv
/$ upgradeproject
zu virtualenvwrapper hinzuzufügen.quelle
Dieser Ansatz funktioniert bei mir immer:
Genommen von:
quelle
Ich habe mein Home-Verzeichnis von einem Mac auf einen anderen verschoben (Mountain Lion zu Yosemite) und habe die kaputte virtuelle Umgebung erst bemerkt, als ich den alten Laptop verloren hatte. Ich hatte den virtualenv-Punkt auf Python 2.7 installiert
brew
und da Yosemite mit Python 2.7 geliefert wurde, wollte ich mein virtualenv auf das System-Python aktualisieren. Als ichvirtualenv
über das vorhandene Verzeichnis lief, wurde eineOSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'
Fehlermeldung angezeigt. Durch Ausprobieren habe ich dieses Problem umgangen, indem ich einige Links entfernt und einige weitere manuell behoben habe. Dies ist, was ich schließlich getan habe (ähnlich wie @Rockalite, aber einfacher):Danach konnte ich virtualenv einfach über dem vorhandenen Verzeichnis ausführen.
quelle
Unter OS X oder MacOS mit Homebrew zum Installieren und Aktualisieren von Python3 musste ich symbolische Links löschen, bevor
python -m venv --upgrade ENV_DIR
dies funktionieren würde.Ich habe Folgendes in upgrade_python3.sh gespeichert, damit ich mich daran erinnere, in welchen Monaten ich es erneut tun muss:
UPDATE: Während dies zunächst gut zu funktionieren schien, gab es beim Ausführen von py.test einen Fehler. Am Ende habe ich die Umgebung aus einer Anforderungsdatei neu erstellt.
quelle
py.test
funktioniert nicht, weil `~ / .virtualenvs / myenv / bin / python3.7 kein Symlink ist und daher nicht aktualisiert wird.~/.virtualenvs/myenv/.Python
dass es einen Symlink gibt.Wenn Sie verwenden
pipenv
, weiß ich nicht, ob es möglich ist, eine vorhandene Umgebung zu aktualisieren, aber zumindest für kleinere Versions-Upgrades scheint es klug genug zu sein, Pakete nicht neu zu erstellen, wenn eine neue Umgebung erstellt wird. ZB von 3.6.4 bis 3.6.5:quelle
Ich möchte nur klarstellen, weil sich einige der Antworten auf
venv
und andere beziehenvirtualenv
.Die Verwendung des Flags
-p
oder--python
wird unterstütztvirtualenv
, jedoch nichtvenv
. Wenn Sie mehr als eine Python-Version haben und angeben möchten, mit welcher Version die erstelltvenv
werden soll, führen Sie dies in der Befehlszeile folgendermaßen aus:Sie können natürlich ein Upgrade mit durchführen,
venv
wie andere bereits betont haben. Dies setzt jedoch voraus, dass Sie bereits den Python aktualisiert haben, mit dem das ursprünglich erstellt wurdevenv
. Sie können nicht auf eine Python-Version aktualisieren, die Sie noch nicht irgendwo auf Ihrem System haben. Stellen Sie daher sicher, dass Sie zuerst die gewünschte Version und dann alle gewünschten Venvs daraus erstellen.quelle
Schritt 1: Einfrieren der Anforderung und Sichern der vorhandenen Umgebung
Schritt 2: Installieren Sie Python 3.7 und aktivieren Sie die virutale Umgebung
Schritt 3: Installieren Sie die Anforderungen
quelle
Für alle mit dem Problem
Sie müssen python3.6-venv installieren
quelle