Aktualisieren Sie Python in einer virtuellen Umgebung
Lesezeit: 11 Minuten
Simon Walker
Gibt es eine Möglichkeit, die Version von Python zu aktualisieren, die in a virtuelle Umgebung (zB wenn ein Bugfix-Release herauskommt)?
Ich könnte pip freeze --local > requirements.txtentfernen Sie dann das Verzeichnis und pip install -r requirements.txtaber dies erfordert eine Menge Neuinstallation großer Bibliotheken, zum Beispiel, numpydie ich viel benutze.
Ich kann sehen, dass dies ein Vorteil ist, wenn Sie z. B. von 2.6 -> 2.7 upgraden, aber was ist mit 2.7.x -> 2.7.y?
Möglicherweise können Sie einige Pfade usw. ändern, damit es funktioniert. Das Letzte, was Sie wollen, ist eine etwas andere Umgebung als die Produktion. Stellen Sie sich vor, wenn es auch nur einen Unterschied zwischen der Kompilierung der verschiedenen Versionen gibt, verlieren Sie die ganze Zeit, die Sie durch das Aufspüren des Fehlers gespart haben. Ich würde mir einfach die Zeit nehmen, eine brandneue virtuelle Umgebung zu erstellen und alles neu zu installieren.
– Sam Dolan
15. Juni 2012 um 22:10 Uhr
@SimonWalker. Genau das gleiche Problem. Ich muss Python 3.5.3 für eine Fehlerbehebung aktualisieren.
– Mohammed Shareef C
19. Juli 2017 um 9:54 Uhr
Wenn Sie zufällig das venv-Modul verwenden, das mit Python 3.3+ geliefert wird, unterstützt es eine --upgrade Möglichkeit. Pro die Dokumente:
Aktualisieren Sie das Umgebungsverzeichnis, um diese Version von Python zu verwenden, vorausgesetzt, Python wurde direkt aktualisiert
python3 -m venv --upgrade ENV_DIR
Ich habe Python auf meinem System von 3.5.1 auf 3.6.4 aktualisiert. Und um Python auf meiner virtuellen Umgebung zu aktualisieren, musste ich python3.6 explizit im Befehl erwähnen: python3.6 -m venv --upgrade <path_of_existing_env>
– Sarfraaz Ahmed
4. Januar 2018 um 18:34 Uhr
Der --upgrade Flag ist meiner Erfahrung nach nicht erforderlich (3.5.2 bis 3.5.4 unter Windows/Git Bash).
– Scott Stevens
10. Januar 2018 um 7:25 Uhr
In meinem Fall, bin/python Und bin/python3 immer noch mit dem alten verbunden python3.4 binär, und ich musste die Links manuell setzen. Gibt es auch eine Möglichkeit entfernen die jetzt veraltete Python-Version?
– Jens
30. April 2018 um 8:03 Uhr
ich habe Error: Command '['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1. > was bedeutet es? Ich sehe keine aktiven Python-Prozesse, kann kein Upgrade durchführen.
– Benutzer305883
4. November 2018 um 9:44 Uhr
@ user305883 Ich habe einen ähnlichen Fehler erhalten, nachdem ich meine System-Python-Version von 3.5 auf 3.6 aktualisiert (und 3.5 entfernt) habe. Ich musste 3.5 neu installieren und ausführen python3.6 -m venv --upgrade ENV_DIR damit es funktioniert. Ich denke, ich muss noch einige symbolische Links aktualisieren ENV_DIR/bin. Daher bestand der Trick darin, mit dem zu aktualisieren neu Python-Version, während die alte Version noch installiert war.
– AstroFloyd
25. Februar 2019 um 20:41 Uhr
Marianobianchi
Hast du das gesehen? 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 keine Option ist, sollten Sie dies lesen, um ein virtualenv mit der gewünschten Python-Version zu installieren.
BEARBEITEN
Ich habe diesen Ansatz getestet (der eine neue virtuelle Umgebung über der alten erstellt) und er hat für mich gut funktioniert. Ich denke, Sie könnten 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 befinden sich für beide Python-Versionen in denselben Ordnern (2.7.x- und 2.7.y-Pakete befinden sich in your_env/lib/python2.7/).
Wenn Sie Ihre Python-Version von virtualenv ändern, müssen Sie alle Ihre Pakete für diese Version erneut installieren (oder einfach die Pakete, die Sie benötigen, in den Paketordner der neuen Version verlinken, dh: your_env/lib/python_newversion/site-packages).
Er wollte nach Möglichkeit keine Pakete neu installieren. Offensichtlich haben Sie numpy noch nie aus dem Quellcode installiert, wenn Sie nicht wissen, warum es wichtig ist 😉 Hinweis: Es dauert LOOOOOOOOOOOOONG.
– Antti Haapala – Слава Україні
16. Juni 2012 um 20:16 Uhr
ja, das verstehe ich. Aber es scheint, dass Pakete nicht verloren gehen, wenn er eine virtuelle Umgebung übereinander erstellt, sodass er numpy oder andere Pakete nicht neu installieren muss. Trotzdem denke ich, dass er dies in einer neuen virtuellen Umgebung versuchen sollte, falls es fehlschlägt.
– marianobianchi
16. Juni 2012 um 20:33 Uhr
Ich bleibe bei meinem Fall, ich glaube, dass die neuen virtualenv-Versionen tatsächlich ein Upgrade durchführen, aber für alte Versionen haben sie nicht einmal die ausführbare Python-Datei überschrieben, was Probleme mit mindestens einer Python-Bugfix-Version verursachte.
Ich habe versucht, eine neue zu erstellen virtualenv oben auf dem alten, und es tat arbeiten. Ich musste angeben -p um es auf die richtige Version von Python zu verweisen.
– Sergej Orshanskiy
4. November 2013 um 3:01 Uhr
Schritt 1: Einfrieren der Anforderung und Erstellen einer Sicherungskopie der vorhandenen Umgebung
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) und machen Sie woanders ein Backup davon. Wenn etwas schief geht, können Sie immer noch 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.
Nebenwirkung: es behebt auch die Symbol not found: _SSLv2_method Ausnahme, wenn Sie dies tun import ssl in einer virtuellen Umgebung nach dem Upgrade von Python auf v2.7.8.
Notiz: Momentan, dies gilt nur für Python 2.7.x.
Wenn Sie Homebrew Python unter OS X verwenden, zuerst deactivate alle virtualenv, dann aktualisiere Python:
brew update && brew upgrade python
Führen Sie die folgenden Befehle aus (<EXISTING_ENV_PATH> ist Pfad Ihrer virtuellen Umgebung):
Erstellen Sie abschließend Ihre virtuelle Umgebung neu:
virtualenv <EXISTING_ENV_PATH>
Dadurch werden alte Python-Kerndateien und Standardbibliotheken (plus setuptools Und pip) werden entfernt, während die benutzerdefinierten Bibliotheken in installiert werden site-packages bleiben erhalten und funktionieren, sobald sie in reinem Python vorliegen. Binäre Bibliotheken müssen möglicherweise neu installiert werden, um ordnungsgemäß zu funktionieren.
Dies funktionierte für mich in 5 virtuellen Umgebungen mit installiertem Django.
Übrigens, wenn ./manage.py compilemessages danach nicht funktioniert, versuchen Sie Folgendes:
brew install gettext && brew link gettext --force
Taylor D. Edmiston
So aktualisieren Sie die Python-Version für ein vorhandenes virtualenvwrapper-Projekt und behalten denselben Namen bei
Ich füge eine Antwort für alle hinzu, die Doug Hellmanns Exzellenz verwenden virtualenvwrapper insbesondere, da die vorhandenen Antworten es für mich nicht getan haben.
Etwas Kontext:
Ich arbeite an einigen Projekten, die Python 2 und einige, die Python 3 sind; während ich es gerne verwenden würde python3 -m venvunterstützt es keine Python 2-Umgebungen
Wenn ich ein neues Projekt starte, verwende ich mkproject Dadurch wird die virtuelle Umgebung erstellt, ein leeres Projektverzeichnis erstellt und cds darin abgelegt
Ich möchte weiterhin virtualenvwrapper verwenden workon Befehl, um jedes Projekt unabhängig von der Python-Version zu aktivieren
Richtungen:
Angenommen, Ihr vorhandenes Projekt heißt benannt foo und führt derzeit Python 2 (mkproject -p python2 foo), obwohl die Befehle die gleichen sind, unabhängig davon, ob Sie von 2.x auf 3.x, 3.6.0 auf 3.6.1 usw. aktualisieren. Ich gehe auch davon aus, dass Sie sich derzeit in der aktivierten virtuellen Umgebung befinden.
1. Deaktivieren und entfernen Sie die alte virtuelle Umgebung:
$ deactivate
$ rmvirtualenv foo
Beachten Sie, dass, wenn Sie den Hooks benutzerdefinierte Befehle hinzugefügt haben (z. B. bin/postactivate) müssen Sie diese speichern, bevor Sie die Umgebung entfernen.
2. Verstauen Sie das eigentliche Projekt in einem temporären Verzeichnis:
$ cd ..
$ mv foo foo-tmp
3. Erstellen Sie die neue virtuelle Umgebung (und das Projektverzeichnis) und aktivieren Sie:
$ mkproject -p python3 foo
4. Ersetzen Sie das leere generierte Projektverzeichnis durch ein echtes Projekt, wechseln Sie zurück in das Projektverzeichnis:
$ cd ..
$ mv -f foo-tmp foo
$ cdproject
5. Installieren Sie Abhängigkeiten erneut, bestätigen Sie die neue Python-Version usw.:
Wenn dies ein häufiger Anwendungsfall ist, erwäge ich, eine PR zu öffnen, um so etwas hinzuzufügen $ upgradevirtualenv / $ upgradeproject zu virtualenvwrapper.
Ja bitte. Ich habe die Hälfte geschafft und große Probleme bekommen … Eine Überprüfung wäre schön, da der erste Schritt nach dem Löschen irreversibel ist (nach meinem derzeitigen Kenntnisstand).
– Chris Frisina
20. März 2020 um 4:59 Uhr
Ich fand es notwendig, auch distutils für meine Python-Version zu installieren, um sicherzustellen, dass der neue mkvirtualenv-Befehl fehlerfrei funktioniert: sudo apt-get install python3.10-distutils
– KenBuckley
23. März 2022 um 9:57 Uhr
Nehmen wir an, dass die Umgebung, die man aktualisieren möchte, den Namen hat venv.
1. Backup-Venv-Anforderungen (Optional)
Sichern Sie zunächst die Anforderungen der virtuellen Umgebung:
pip freeze > requirements.txt
deactivate
#Move the folder to a new one
mv venv venv_old
2. Installieren Sie Python
Angenommen, man hat keinen sudo-Zugriff, pyenv ist eine zuverlässige und schnelle Installationsmethode Python. Dafür sollte man laufen
Nun sollte man die gewünschte Python-Version installieren. Sagen wir Version 3.8.3
pyenv install 3.8.3
Man kann bestätigen, ob es richtig installiert wurde, indem man es ausführt
pyenv versions
Die Ausgabe sollte der Ort und die Versionen sein (in diesem Fall 3.8.3)
3. Erstellen Sie die neue virtuelle Umgebung
Erstellen Sie schließlich mit der installierten neuen Python-Version eine neue virtuelle Umgebung (nennen wir sie venv)
python3.8 -m venv venv
Aktivieren Sie es
source venv/bin/activate
und installieren Sie die Anforderungen
pip install -r requirements.txt
Jetzt sollte man mit einer neuen Umgebung einsatzbereit sein.
Ja bitte. Ich habe die Hälfte geschafft und große Probleme bekommen … Eine Überprüfung wäre schön, da der erste Schritt nach dem Löschen irreversibel ist (nach meinem derzeitigen Kenntnisstand).
– Chris Frisina
20. März 2020 um 4:59 Uhr
Ich fand es notwendig, auch distutils für meine Python-Version zu installieren, um sicherzustellen, dass der neue mkvirtualenv-Befehl fehlerfrei funktioniert: sudo apt-get install python3.10-distutils
– KenBuckley
23. März 2022 um 9:57 Uhr
Russ Egan
Ich konnte keine neue virtuelle Umgebung über der alten erstellen. Aber es gibt Tools in pip, die es viel schneller machen, Anforderungen in einem brandneuen venv neu zu installieren. Pip kann jeden der Artikel in Ihrer requirements.txt in ein Radpaket einbauen und dieses in einem lokalen Cache speichern. Wenn Sie ein neues venv erstellen und darin pip install ausführen, verwendet pip automatisch die vorgefertigten Räder, wenn es sie findet. Räder werden viel schneller installiert, als setup.py für jedes Modul auszuführen.
Ich installiere Rad (pip install wheel), dann renne pip wheel -r requirements.txt. Dies speichert die gebauten Räder im Rad-Verzeichnis in meiner pip.conf.
Von da an werden sie jedes Mal, wenn ich eine dieser Anforderungen installiere, von den Rädern installiert, was ziemlich schnell geht.
Für die meisten Leute denke ich, dass es sinnvoll ist, Pip-Maschinen zu verwenden, um die Arbeit zu erledigen, aber für jeden, der seine Virtualenvs nach dem Aktivieren, Vordeaktivieren usw. angepasst hat, ist dies keine wünschenswerte Option, da alles verloren geht und manuell nachgelesen werden muss.
– dpwr
18. April 2016 um 17:26 Uhr
14488100cookie-checkAktualisieren Sie Python in einer virtuellen Umgebungyes
Möglicherweise können Sie einige Pfade usw. ändern, damit es funktioniert. Das Letzte, was Sie wollen, ist eine etwas andere Umgebung als die Produktion. Stellen Sie sich vor, wenn es auch nur einen Unterschied zwischen der Kompilierung der verschiedenen Versionen gibt, verlieren Sie die ganze Zeit, die Sie durch das Aufspüren des Fehlers gespart haben. Ich würde mir einfach die Zeit nehmen, eine brandneue virtuelle Umgebung zu erstellen und alles neu zu installieren.
– Sam Dolan
15. Juni 2012 um 22:10 Uhr
@SimonWalker. Genau das gleiche Problem. Ich muss Python 3.5.3 für eine Fehlerbehebung aktualisieren.
– Mohammed Shareef C
19. Juli 2017 um 9:54 Uhr