Vraag Alle pakketten upgraden met pip


Is het mogelijk om alle Python-pakketten in één keer te upgraden met pip?

Merk op dat er is een functieverzoek hiervoor op de officiële issue tracker.


1418
2018-04-27 09:23


oorsprong


antwoorden:


Er is nog geen ingebouwde vlag, maar u kunt gebruiken

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

Opmerking: hier zijn oneindige potentiële variaties. Ik probeer dit antwoord kort en eenvoudig te houden, maar stel wel variaties in de opmerkingen voor!

Relevante bewerkingen:

  • Toegevoegd een grep om "-e" pakketdefinities over te slaan, zoals voorgesteld door @jawache (Ja, je zou kunnen vervangen grep+cut met sed of awk of perl of...).
  • Nieuwere versies van pip kunt u verouderde pakketten weergeven:

    pip list --outdated --format=freeze
    
  • Toegevoegd -n1 naar xargs, voorkomt dat alles wordt gestopt als het bijwerken van een pakket mislukt (bedankt @andsens)


1660
2017-08-10 19:56



U kunt de volgende Python-code gebruiken. anders pip freeze, dit zal geen waarschuwingen en FIXME-fouten afdrukken.

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



Om alle lokale pakketten te upgraden; je zou kunnen gebruiken pip-review:

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

pip-review is een vork van pip-tools. Zien pip-tools kwestie genoemd door @knedlsepp. pip-review pakket werkt maar pip-tools pakket werkt niet meer.

pip-review werkt op Windows sinds versie 0.5.


501
2018-04-29 00:34



Werkt op Windows. Zou ook goed moeten zijn voor anderen. ($ is de map waarin u zich bevindt, in de opdrachtprompt, bijvoorbeeld C: / Gebruikers / Gebruikersnaam>)

do

$ pip freeze > requirements.txt

open het tekstbestand, vervang de == met> =

dan doen

$ pip install -r requirements.txt --upgrade

Als je een probleem hebt met een bepaald pakket dat de upgrade blokkeert (soms numpy), ga dan gewoon naar de directory ($), becommentarieer de naam (voeg er een # voor toe) en voer de upgrade opnieuw uit. Je kunt later dat gedeelte terugklappen. Dit is ook geweldig voor het kopiëren van python-omgevingen.

Ik hou ook van de pip-review methode:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

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

U kunt 'a' selecteren om alle pakketten te upgraden; als een upgrade mislukt, voer hem dan opnieuw uit en hij gaat verder bij de volgende.


182
2017-11-12 09:20



Windows-versie na overleg uitstekend documentatie voor FOR door Rob van der Woude

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

87
2018-02-25 18:04



U kunt alleen de pakketten afdrukken die zijn verouderd

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

70
2018-06-10 12:50



De volgende one-liner kan helpen:

pip list --format legacy --outdated | sed 's/(.*//g' | xargs -n1 pip install -U

xargs -n1 gaat door als er een fout optreedt.

Als u meer "fijnkorrelige" controle wilt over wat er is weggelaten en wat een fout veroorzaakt, moet u het niet toevoegen -n1 markeer en definieer expliciet de te negeren fouten door de volgende regel voor elke afzonderlijke fout te "pipen":

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

Hier is een werkend voorbeeld:

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



Deze optie lijkt mij meer rechtdoorzee en leesbaar:

pip install -U `pip list --outdated | awk '{ print $1}'`

(awk '{ print $1}' selecteert het eerste woord van de regel (gescheiden door een spatie))

En deze versie zorgt voor de onderdrukking van een waarschuwingsbericht pip list --outdated:

pip install -U `pip list --outdated | awk '!/Could not|ignored/ { print $1}'`

(awk '!/<pattern>/' verwijdert lijn met een bepaald patroon. In mijn geval bevatten de waarschuwingsberichten respectievelijk "Could not" en "ignored")

Dit kan ook worden gebruikt om de komende standaard aan te pakken columns formaat:

pip install -U `pip list --format=columns --outdated | awk '!/Package|---/{ print $1}'`

42
2017-11-21 23:15