Ist es möglich, alle Python-Pakete gleichzeitig zu aktualisieren pip
?
Hinweis : Auf dem offiziellen Issue-Tracker gibt es hierfür eine Funktionsanforderung .
Ist es möglich, alle Python-Pakete gleichzeitig zu aktualisieren pip
?
Hinweis : Auf dem offiziellen Issue-Tracker gibt es hierfür eine Funktionsanforderung .
pip freeze
(wiebundle install
odernpm shrinkwrap
) auflisten . Speichern Sie am besten eine Kopie davon, bevor Sie basteln.pip
Installation beim Upgrade vermasselnrequests
. Die Fehlermeldung lautetcannot import name IncompleteRead
.Antworten:
Es gibt noch keine eingebaute Flagge, aber Sie können verwenden
Hinweis: Hierfür gibt es unendlich viele mögliche Variationen. Ich versuche, diese Antwort kurz und einfach zu halten, aber bitte schlagen Sie Variationen in den Kommentaren vor!
In älteren Versionen von
pip
können Sie dies stattdessen verwenden:Das
grep
heißt, bearbeitbare ("-e") Paketdefinitionen zu überspringen, wie von @jawache vorgeschlagen. (Ja, Sie könntengrep
+cut
durchsed
oderawk
oderperl
oder ... ersetzen .)Das
-n1
Flag fürxargs
verhindert, dass alles gestoppt wird, wenn die Aktualisierung eines Pakets fehlschlägt (danke @andsens ).quelle
pip install -U
, werden alle Pakete aktualisiert. Ich fürchte, es kann zu Konflikten mit apt-get kommen.tee
vor dem eigentlichen Upgrade eine einwerfen, damit Sie eine Liste der ursprünglichen Versionen erhalten. Aufpip freeze --local | tee before_upgrade.txt | ...
diese Weise wäre es einfacher, bei Problemen zurückzukehren.-H
,sudo
um eine nervige Fehlermeldung zu vermeiden:$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
Sie können den folgenden Python-Code verwenden. Im Gegensatz
pip freeze
dazu werden hiermit keine Warnungen und FIXME-Fehler gedruckt. Für pip <10.0.1Für pip> = 10.0.1
quelle
import pip
pip.install('packagename')
?So aktualisieren Sie alle lokalen Pakete; Sie könnten verwenden
pip-review
:pip-review
ist eine Gabelung vonpip-tools
. Siehepip-tools
Ausgabe von erwähnten @knedlsepp .pip-review
Paket funktioniert, aberpip-tools
Paket funktioniert nicht mehr.pip-review
funktioniert unter Windows seit Version 0.5 .quelle
pip-review --local --auto
Funktioniert unter Windows. Sollte auch für andere gut sein. ($ ist das Verzeichnis, in dem Sie sich in der Eingabeaufforderung befinden, z. B. C: / Users / Username>)
tun
Öffnen Sie die Textdatei, ersetzen Sie sie
==
durch>=
und führen Sie sie ausWenn Sie ein Problem mit einem bestimmten Paket haben, das das Upgrade blockiert (manchmal numpy), gehen Sie einfach in das Verzeichnis ($), kommentieren Sie den Namen aus (fügen Sie ein # davor hinzu) und führen Sie das Upgrade erneut aus. Sie können diesen Abschnitt später wieder auskommentieren. Dies eignet sich auch hervorragend zum Kopieren von globalen Python-Umgebungen.
Ein anderer Weg:
Ich mag auch die Pip-Review-Methode:
Sie können 'a' auswählen, um alle Pakete zu aktualisieren. Wenn ein Upgrade fehlschlägt, führen Sie es erneut aus und es wird beim nächsten fortgesetzt.
quelle
requirements.txt
's entfernen=={version}
. Zum Beispiel: Inpython-dateutil==2.4.2
dempython-dateutil
für alle Linien.$ pip freeze | cut -d '=' -f1> requirements.txt
um die Version zu entfernenpip3 install -r <(pip3 freeze) --upgrade
Effektiv in einen Befehl kürzen. Es<(pip3 freeze)
handelt sich um eine anonyme Pipe, die jedoch alsWindows - Version nach ausgezeichnete Beratung Dokumentation für
FOR
Rob van der Woudequelle
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i
Schneller, da nur versucht wird, "veraltete" Pakete zu aktualisierenfor /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i
. Wenn dies aus einer Batchdatei ausgeführt wird, stellen Sie sicher, dass Sie%%i
anstelle von verwenden%i
. Beachten Sie auch, dass die Aktualisierung sauberer ist,pip
bevor Sie diesen Befehl mit ausführenpython -m pip install --upgrade pip
.Verwenden pipupgrade !
Mit pipupgrade können Sie Ihr System, Ihr lokales System oder Ihre Pakete von einer
requirements.txt
Datei aus aktualisieren ! Außerdem werden Pakete selektiv aktualisiert, bei denen Änderungen nicht unterbrochen werden. pipupgrade stellt außerdem sicher, dass Pakete aktualisiert werden, die in mehreren Python-Umgebungen vorhanden sind. Kompatibel mit Python2.7 +, Python3.4 + und pip9 +, pip10 +, pip18 +, pip19 +.HINWEIS: Ich bin der Autor des Tools.
quelle
Checking...
immer hängen, als ich es versuchte.[0;93mChecking...[0m
ModuleNotFoundError: No module named 'ctypes.windll'
Sie können nur die veralteten Pakete drucken
quelle
pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
python -m pip list outdated
(obwohl es nicht im Anforderungsformat ist).Diese Option erscheint mir einfacher und lesbarer:
Die Erklärung ist, dass
pip list --outdated
eine Liste aller veralteten Pakete in diesem Format ausgegeben wird:Überspringt im Befehl awk
NR>2
die ersten beiden Datensätze (Zeilen) und{print $1}
wählt das erste Wort jeder Zeile aus (wie von SergioAraujo vorgeschlagen, habe ich entfernt,tail -n +3
daawk
das Überspringen von Datensätzen tatsächlich möglich ist).quelle
awk 'NR>2 {print $1}'
die Ausgabe für SieDer folgende Einzeiler könnte sich als hilfreich erweisen:
(pip> 20,0)
pip list --format freeze --outdated | sed 's/=.*//g' | xargs -n1 pip install -U
xargs -n1
geht weiter, wenn ein Fehler auftritt.Wenn Sie mehr "feinkörnige" Kontrolle darüber benötigen, was weggelassen wird und was einen Fehler auslöst, sollten Sie das
-n1
Flag nicht hinzufügen und die zu ignorierenden Fehler explizit definieren, indem Sie die folgende Zeile für jeden einzelnen Fehler "weiterleiten":| sed 's/^<First characters of the error>.*//'
Hier ist ein Arbeitsbeispiel:
quelle
| sed 's/^<First characters of the error>.*//'
. Vielen Dank!pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
Robustere Lösung
Verwenden Sie für pip3 Folgendes:
Entfernen Sie für Pip einfach die 3s als solche:
OSX-Kuriosität
OSX wird ab Juli 2017 mit einer sehr alten Version von sed (ein Dutzend Jahre alt) ausgeliefert. Verwenden Sie in der obigen Lösung -E anstelle von -r, um erweiterte reguläre Ausdrücke zu erhalten.
Lösen von Problemen mit gängigen Lösungen
Diese Lösung ist gut konzipiert und getestet 1 , während selbst bei den gängigsten Lösungen Probleme auftreten.
Der obige Befehl verwendet die einfachste und portabelste Pip-Syntax in Kombination mit sed und sh, um diese Probleme vollständig zu lösen. Details des Sed-Betriebs können mit der kommentierten Version 2 überprüft werden .
Einzelheiten
[1] Getestet und regelmäßig in einem Linux 4.8.16-200.fc24.x86_64-Cluster verwendet und auf fünf anderen Linux / Unix-Varianten getestet. Es läuft auch unter Cygwin64, das unter Windows 10 installiert ist. Tests unter iOS sind erforderlich.
[2] Um die Anatomie des Befehls klarer zu sehen, entspricht dies genau dem obigen Befehl pip3 mit Kommentaren:
[3] Das Aktualisieren einer Python- oder PIP-Komponente, die auch beim Aktualisieren einer Python- oder PIP-Komponente verwendet wird, kann eine mögliche Ursache für einen Deadlock oder eine Beschädigung der Paketdatenbank sein.
quelle
sed
von OS X zu überwinden, ist die Verwendung vongsed
(GNU sed). Um es zu bekommen,brew install gnu-sed
Dies scheint prägnanter.
Erläuterung:
pip list --outdated
bekommt Zeilen wie dieseIm
cut -d ' ' -f1
,-d ' '
setzt „Raum“ als Trennzeichen,-f1
Mittel , um die erste Spalte zu erhalten.So werden die obigen Zeilen:
dann gib sie weiter
xargs
, um den Befehl auszuführenpip install -U
, wobei jede Zeile als anhängendes Argument dient-n1
begrenzt die Anzahl der an jeden Befehl übergebenen Argumentepip install -U
auf 1quelle
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
Ich hatte das gleiche Problem mit dem Upgrade. Ich aktualisiere nie alle Pakete. Ich aktualisiere nur das, was ich brauche, da das Projekt möglicherweise kaputt geht.
Da es keine einfache Möglichkeit gab, Paket für Paket zu aktualisieren und die Datei " require.txt" zu aktualisieren
requirements.txt
, habe ich diesen Pip-Upgrader geschrieben, der auch die Versionen in Ihrer Datei für die ausgewählten Pakete (oder alle Pakete) aktualisiert .Installation
Verwendungszweck
Aktivieren Sie Ihre virtuelle Umgebung (wichtig, da dadurch auch die neuen Versionen aktualisierter Pakete in der aktuellen virtuellen Umgebung installiert werden).
cd
in Ihr Projektverzeichnis, und führen Sie dann Folgendes aus:Erweiterte Verwendung
Wenn die Anforderungen an einem nicht standardmäßigen Speicherort platziert sind, senden Sie sie als Argumente:
Wenn Sie bereits wissen, welches Paket Sie aktualisieren möchten, senden Sie es einfach als Argumente:
Wenn Sie ein Upgrade auf die Version vor oder nach der Veröffentlichung durchführen müssen, fügen Sie
--prerelease
Ihrem Befehl ein Argument hinzu.Vollständige Offenlegung: Ich habe dieses Paket geschrieben.
quelle
virtualenv
nicht aktiviertpip-upgrade --skip-virtualenv-check
Von https://github.com/cakebread/yolk :
Sie müssen jedoch zuerst Eigelb bekommen:
quelle
Einzeilige Version von @ Ramanas Antwort .
`
quelle
sudo pip install
, verwenden Sie einen virtuellen env , statt.Wenn Sie eine virtuelle Umgebung verwenden und nur Pakete aktualisieren möchten, die Ihrer virtuellen Umgebung hinzugefügt wurden , möchten Sie möglicherweise Folgendes tun:
quelle
Die einfachste und schnellste Lösung, die ich in der Pip-Issue-Diskussion gefunden habe, ist:
Quelle: https://github.com/pypa/pip/issues/3819
quelle
Windows Powershell-Lösung
quelle
pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}
?pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}
wäre angemessener.Verwenden Sie awk-Update-Pakete:
pip install -U $(pip freeze | awk -F'[=]' '{print $1}')
Windows Powershell Update
foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}
quelle
Sie können dies versuchen:
quelle
Das ziemlich erstaunliche Eigelb macht dies einfach.
Weitere Informationen zu Eigelb finden Sie unter https://pypi.python.org/pypi/yolk/0.4.3
Es kann viele Dinge tun, die Sie wahrscheinlich nützlich finden.
quelle
yolk
aufyolk3k
, Ihre ursprüngliche Antwort auf jeden Fall hatte Probleme mit python3.@ Ramanas Antwort hat für mich am besten funktioniert, aber ich musste ein paar Fänge hinzufügen:
Das
site-packages
Prüfung schließt meine Entwicklungspakete aus, da sie sich nicht im Verzeichnis der System-Site-Pakete befinden. Das try-außer überspringt einfach Pakete, die aus PyPI entfernt wurden.@endolith: Ich hatte auch auf ein einfaches gehofft
pip.install(dist.key, upgrade=True)
, aber es sieht nicht so aus, als ob pip nur für die Befehlszeile verwendet werden sollte (in den Dokumenten wird die interne API nicht erwähnt, und die Pip-Entwickler haben sie nicht verwendet docstrings).quelle
pip
anscheinend Pakete ein/usr/local/lib/python2.7/dist-packages
oder ähnliches.if
In diesem Fall könnten Sie in der Anweisung '/ usr / local / lib /' anstelle von 'site-packages' verwenden .Das
pip_upgrade_outdated
macht den Job. Laut seinen Dokumenten :Schritt 1:
Schritt 2:
quelle
Gesendet durch eine Pull-Anfrage an die Pip-Leute ; Verwenden Sie in der Zwischenzeit diese Pip-Bibliothekslösung, die ich geschrieben habe:
quelle
Das schien für mich zu funktionieren ...
Ich habe
printf
danach ein Leerzeichen verwendet, um die Paketnamen richtig zu trennen.quelle
Dies ist eine PowerShell-Lösung für Python 3:
Und für Python 2:
Dadurch werden die Pakete einzeln aktualisiert. Also a
Danach sollte sichergestellt werden, dass keine Abhängigkeiten unterbrochen werden.
quelle
Wie wäre es mit:
quelle
Das kürzeste und einfachste unter Windows.
quelle
Mein Skript:
quelle
Ist das nicht effektiver?
pip list -o
listet veraltete Pakete auf;grep -v -i warning
invertierte Übereinstimmung aufwarning
, um Fehler beim Aktualisieren zu vermeidencut -f1 -d1' '
gibt das erste Wort zurück - den Namen des veralteten Pakets;tr "\n|\r" " "
konvertiert das mehrzeilige Ergebnis voncut
in eine einzeilige, durch Leerzeichen getrennte Liste;awk '{if(NR>=3)print}'
Überspringt Kopfzeilencut -d' ' -f1
holt die erste Spaltexargs -n1 pip install -U
Nimmt 1 Argument aus der Pipe links davon und übergibt es an den Befehl, um die Liste der Pakete zu aktualisieren.quelle
kerberos iwlib PyYAML Could pygpgme Could Could Could ...
Beachten Sie alle "Könnte". Diese stammen aus der Ausgabe vonpip list -o
"Konnte keine Downloads finden, die die Anforderung <Paket> erfüllen"pip list -o
?# pip list -o; urwid (Current: 1.1.1 Latest: 1.3.0); Could not find any downloads that satisfy the requirement python-default-encoding; pycups (Current: 1.9.63 Latest: 1.9.68); Could not find any downloads that satisfy the requirement policycoreutils-default-encoding; Could not find any downloads that satisfy the requirement sepolicy;
pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ")
. Andernfalls könnten Sie leicht eine Zeile verpassen, die Sie nicht möchten, und das von DrStrangeprk erwähnte Ergebnis erhalten.xargs
stattdessen zu verwenden.pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U
Das-r
Flag stellt sicher, dasspip install -U
es nicht ausgeführt wird, wenn keine veralteten Pakete vorhanden sind. Das-p
Flag fordert den Benutzer zur Bestätigung auf, bevor er einen Befehl ausführt. Sie können das-n1
Flag hinzufügen , damit Sie aufgefordert werden, bevor Sie jedes Paket separat installieren.eine Zeile in Powershell 5.1 mit Adm-Rechten, Python 3.6.5 und Pip Version 10.0.1:
es funktioniert reibungslos, wenn die Liste keine kaputten Pakete oder Spezialräder enthält ...
quelle