Frage Upgrade aller Pakete mit pip


Ist es möglich, alle Python-Pakete gleichzeitig zu aktualisieren? pip?

Beachten Sie, dass dort ist eine Funktionsanfrage dafür auf dem offiziellen Issue Tracker.


1418
2018-04-27 09:23


Ursprung


Antworten:


Es gibt noch keine integrierte Flagge, aber Sie können verwenden

pip freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

Hinweis: Es gibt unendlich viele potentielle Variationen dafür. Ich versuche, diese Antwort kurz und einfach zu halten, aber bitte schlage Variationen in den Kommentaren vor!

Relevante Änderungen:

  • Hinzugefügt a grep Überspringen von "-e" -Paketdefinitionen, wie von @jawache vorgeschlagen (Ja, Sie könnten ersetzen grep+cut mit sed oder awk oder perl oder...).
  • Neuere Versionen von pip Damit können Sie veraltete Pakete auflisten:

    pip list --outdated --format=freeze
    
  • Hinzugefügt -n1 zu xargsverhindert, dass alles gestoppt wird, wenn das Aktualisieren eines Pakets fehlschlägt (danke @andsens)


1660
2017-08-10 19:56



Sie können den folgenden Python-Code verwenden. nicht wie pip freeze, dies wird keine Warnungen und FIXME Fehler ausgeben.

import pip
from subprocess import call

packages = [dist.project_name for dist in pip.get_installed_distributions()]
call("pip install --upgrade " + ' '.join(packages), shell=True)

514
2018-04-30 03:31



Um alle lokalen Pakete zu aktualisieren; Du könntest benutzen pip-review:

$ pip install pip-review
$ pip-review --local --interactive

pip-review ist eine Gabel von pip-tools. Sehen pip-tools Problem erwähnt von @ knedlsepp. pip-review Paket funktioniert aber pip-tools Paket funktioniert nicht mehr.

pip-review funktioniert unter Windows seit Version 0.5.


501
2018-04-29 00:34



Funktioniert unter Windows. Sollte auch für andere gut sein. ($ ist das Verzeichnis, in dem Sie sich befinden, in der Eingabeaufforderung. zB C: / Benutzer / Benutzername>)

machen

$ pip freeze > requirements.txt

Öffne die Textdatei, ersetze das == mit> =

dann mach

$ pip install -r requirements.txt --upgrade

Wenn Sie ein Problem mit einem bestimmten Paket haben, das das Upgrade blockiert (manchmal numpy), gehen Sie einfach in das Verzeichnis ($), kommentieren Sie den Namen (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 globaler Python-Umgebungen.

Ich mag auch die Pip-Review-Methode:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

$ py -3 -m pip_review --local --interactive

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 mit dem nächsten fortgesetzt.


182
2017-11-12 09:20



Windows-Version nach Beratung hervorragend Dokumentation zum FOR von Rob van der Woude

for /F "delims===" %i in ('pip freeze -l') do pip install -U %i

87
2018-02-25 18:04



Sie können nur die Pakete drucken, die veraltet sind

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'

70
2018-06-10 12:50



Der folgende One-Liner könnte sich als hilfreich erweisen:

pip list --format legacy --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 verursacht, sollten Sie das nicht hinzufügen -n1 Markieren und definieren Sie die zu ignorierenden Fehler explizit, indem Sie die folgende Zeile für jeden einzelnen Fehler "umleiten":

| sed 's/^<First characters of the error>.*//'

Hier ist ein Arbeitsbeispiel:

pip list --format legacy --outdated | sed 's/(.*//g' | sed 's/^<First characters of the first error>.*//' | sed 's/^<First characters of the second error>.*//' | xargs pip install -U

57
2018-03-07 20:25