Ar įmanoma atnaujinti visus "Python" paketus vienu metu naudojant pip
?
Pastaba: oficialioje problemų sekimo sistemoje yra funkcijos užklausa.
Kol kas nėra integruotos vėliavos, bet galite naudoti
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
Pastaba: yra begalė galimų variantų. Stengiuosi, kad šis atsakymas būtų trumpas ir paprastas, bet komentaruose siūlykite variantus!
Senesnėje pip
versijoje vietoj to galite naudoti šį variantą:
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
Kaip pasiūlė @jawache, grep
skirtas praleisti redaguojamus ("-e") paketų apibrėžimus. (Taip, grep
+cut
galite pakeisti sed
arba awk
arba perl
arba...).
xargs
vėliavėlė -n1
neleidžia visko sustabdyti, jei nepavyksta atnaujinti vieno paketo (ačiū @andsens).
Galite naudoti šį "Python" kodą. Skirtingai nei pip freeze
, šis kodas nespausdina įspėjimų ir FIXME klaidų.
Dėl 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)
Dėl 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)
Čia yra mano rbp atsakymo variantas, kuris apeina "redaguojamus" ir plėtros distribucijas. Jis turi du bendrus originalo trūkumus: be reikalo iš naujo atsisiunčiamas ir įdiegiamas, o vieno paketo klaida neleidžia atnaujinti visų po jo einančių paketų.
pip freeze |sed -ne 's/==.*//p' |xargs pip install -U --
Susiję pranešimai apie klaidas, šiek tiek išskaidyti po perkėlimo iš "Bitbucket":