Er det mulig å oppgradere alle Python-pakker samtidig med pip
?
Merk: det finnes en funksjonsforespørsel for dette på den offisielle problemsporeren.
Det er ikke et innebygd flagg ennå, men du kan bruke
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
Merk: det er uendelige potensielle variasjoner for dette. Jeg prøver å holde dette svaret kort og enkelt, men foreslå gjerne variasjoner i kommentarfeltet!
I eldre versjoner av pip
kan du bruke dette i stedet:
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
grep
er for å hoppe over redigerbare ("-e") pakkedefinisjoner, som foreslått av @jawache. (Ja, du kan erstatte grep
+cut
med sed
eller awk
eller perl
eller...).
Flagget -n1
for xargs
forhindrer at alt stoppes hvis oppdatering av en pakke mislykkes (takk @andsens).
Du kan bruke følgende Python-kode. I motsetning til pip freeze
, vil dette ikke skrive ut advarsler og FIXME-feil.
For pip < 10.0.1.
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)
For pip >= 10.0.1 For pip >= 10.0.1
import pkg_resources
from subprocess import call
packages = [dist.project_name for dist in pkg_resources.working_set]
call("pip install --upgrade " + ' '.join(packages), shell=True)
Her er min variasjon på rbp&# 39s svar, som omgår " redigerbar " og utviklingsdistribusjoner. Den deler to feil med originalen: den laster ned og installerer på nytt unødvendig; og en feil på en pakke vil forhindre oppgradering av hver pakke etter det.
pip freeze |sed -ne 's/==.*//p' |xargs pip install -U --
Relaterte feilrapporter, litt usammenhengende etter migreringen fra bitbucket: