Uważaj na zgniliznę oprogramowania - aktualizacja zależności może uszkodzić twoją aplikację. Możesz wyświetlić dokładną wersję wszystkich zainstalowanych pakietów za pomocą pip freeze(jak bundle installlub npm shrinkwrap). Najlepiej zapisać kopię tego przed majstrowaniem.
Pułkownik Panic
Uważaj, robiąc to, psujesz pipinstalację podczas aktualizacji requests. Komunikat o błędzie to cannot import name IncompleteRead.
Paul Rooney,
11
Wypróbowałem kilka odpowiedzi, a nowsza (a zatem odpowiedź o niskiej punktacji) daje znacznie lepszą wydajność: stackoverflow.com/questions/2720014/…
To pytanie jest zarówno tak stare, jak i przydatne, chcę tylko powiadomić każdego, kto tu teraz przyjdzie, że istnieje teraz nowy oficjalny najlepszy sposób na wykonanie tego wszystkiego: pipenv. Dokumenty są tutaj: docs.pipenv.org/basics, a autor Pycon 2018 mówi o tym tutaj: youtube.com/watch?v=GBQAKldqgZs . Miłego kodowania!
Malik A. Rumi
Odpowiedzi:
2257
Nie ma jeszcze wbudowanej flagi, ale możesz jej użyć
Racja :( Problem występuje teraz na github.com/pypa/pip/issues/59 . Ale na każdą sugestię wydaje się odpowiadać „Tak, ale jestem zbyt pewien, czy X jest właściwym sposobem na zrobienie Y” ... Teraz jest lepiej niż nigdy? Praktyczność pokonuje czystość? :(
rbp
20
Drukuje również te pakiety, które zostały zainstalowane przy użyciu zwykłego menedżera pakietów (takiego jak apt-get lub Synaptic). Jeśli pip install -Uto zrobię, zaktualizuje wszystkie pakiety. Obawiam się, że może to spowodować konflikt z apt-get.
Jabba,
8
Co powiesz na zmianę grep na: egrep -v '^ (\ - e | #)' (ten wiersz pojawia się podczas uruchamiania go na Ubuntu 12.10: „## FIXME: nie można znaleźć adresu URL svn w linkach_zależności dla tego pakietu:”.
LasseValentini,
32
Chciałbym dorzucić teeprzed wykonaniem rzeczywistego uaktualnienia, dzięki czemu można uzyskać listę oryginalnych verisons. Np. pip freeze --local | tee before_upgrade.txt | ...W ten sposób łatwiej byłoby cofnąć, jeśli wystąpią jakiekolwiek problemy.
Działa to niesamowicie dobrze… Zawsze jest tak satysfakcjonujące, gdy zadanie zajmuje NAPRAWDĘ długi czas … i daje ci mnóstwo nowych rzeczy! PS: Uruchom go jako root, jeśli korzystasz z systemu OS X!
Alex Gray
52
Czy nie ma sposobu na zainstalowanie przy użyciu pip bez wywołania podprocesu? Coś takiego import pippip.install('packagename')?
@BenMezger: Naprawdę nie powinieneś używać pakietów systemowych w swoim virtualenv. Nie powinieneś także uruchamiać więcej niż kilku zaufanych, znanych programów jako root. Uruchom virtualenvs z pakietami --no-site (domyślnie w najnowszych wersjach).
jeffcook2150,
3
Kciuki w górę, wybrana odpowiedź (powyżej) kończy się niepowodzeniem, jeśli nie można już znaleźć pakietu. Ten skrypt po prostu przechodzi do następnych pakietów, cudownie.
Josh
642
Aby zaktualizować wszystkie lokalne pakiety; możesz użyć pip-review:
pip-reviewjest rozwidleniem pip-tools. Zobacz pip-toolsproblem wspomniany przez @knedlsepp . pip-reviewpakiet działa, ale pip-toolspakiet już nie działa.
@mkoistinen To dobre narzędzie, ale dopóki nie zostanie połączone w PIP, oznacza zainstalowanie czegoś dodatkowego, czego nie każdy może chcieć zrobić.
Wernight
2
@Daniel: pip-tools już nie działa, działa pip-review (rozwidlenie pip-narzędzi).
jfs
7
Pip-review działa dobrze (przynajmniej dla wersji Python 3.5.0)
FredrikHedman
15
Aby zaktualizować wszystko bez trybu interaktywnego:pip-review --local --auto
Dlamini,
333
Działa w systemie Windows. Powinien być także dobry dla innych. ($ to katalog, w którym się znajdujesz, w wierszu polecenia. np. C: / Users / Username>)
zrobić
$ pip freeze > requirements.txt
otwórz plik tekstowy, wymienić ==się >=i wykonać
$ pip install -r requirements.txt --upgrade
Jeśli masz problem z pewnym pakietem opóźniającym aktualizację (czasami numpy), po prostu przejdź do katalogu ($), skomentuj nazwę (dodaj # przed nim) i ponownie uruchom aktualizację. Możesz później cofnąć komentarz do tej sekcji. Jest to również świetne do kopiowania globalnych środowisk Pythona.
Możesz wybrać „a”, aby zaktualizować wszystkie pakiety; jeśli jedno uaktualnienie nie powiedzie się, uruchom je ponownie i będzie kontynuowane przy następnym.
Należy usunąć requirements.txt„s =={version}. Na przykład: python-dateutil==2.4.2aby python-dateutilna wszystkich liniach.
youngminz
4
Odkryłem, że tak naprawdę nie uaktualniało to pakietów na macOS.
jkooker
10
@youngminz Poleciłbym szybkie „Zamień wszystko” == ">"> = "'w twoim edytorze / ide przed uruchomieniem polecenia„ install install ... ”, aby to naprawić
Amaury Liet
7
dla systemu Linux: $ pip freeze | cut -d '=' -f1> requirements.txtw celu usunięcia wersji
Cavaz
1
Jeśli używana powłoka to bash, możesz ją skrócić do jednego polecenia za pomocą pip3 install -r <(pip3 freeze) --upgrade Efektywnie, <(pip3 freeze)jest anonimowym potokiem, ale będzie działał jako obiekt pliku
Sergiy Kolodyazhnyy
128
Wersja dla Windows po konsultacji doskonałą dokumentację dla FORRoba van der Woude
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i Szybciej, ponieważ spróbuje jedynie zaktualizować „przestarzałe” pakiety
Refael Ackermann
3
@RefaelAckermann Podejrzewam, że będzie to wolniejsze niż oryginalne :) Aby wiedzieć, które pakiety są nieaktualne, pip musi najpierw sprawdzić, jaka jest najnowsza wersja każdego pakietu. Robi to dokładnie tak samo jak pierwszy krok podczas aktualizacji i nie jest kontynuowany, jeśli nie jest dostępna nowsza wersja. Jednak w twojej wersji pip sprawdzi wersje dwa razy, po raz pierwszy w celu ustalenia listy przestarzałych pakietów, a drugi raz podczas aktualizacji pakietów na tej liście.
Piotr Dobrogost
2
@RefaelAckermann Rozpinanie pip jest o rząd wielkości szybsze niż sprawdzanie wersji pakietu przez sieć, więc jest to liczba kontroli, które należy zoptymalizować, a nie liczba spin-upów. Mój wykonuje n czeków, twój wykonuje n + m czeków.
Piotr Dobrogost
2
+1 - Jest 6.20.2019, używam Pythona 3.7.3 na Windows 10 i był to dla mnie najlepszy sposób na aktualizację wszystkich moich lokalnych pakietów.
MacItaly
1
Trzeba pominąć dwa pierwsze linie wyjścia: for /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i. Jeśli jest uruchamiany z pliku wsadowego, użyj go %%izamiast %i. Należy również pamiętać, że łatwiej jest zaktualizować pipprzed uruchomieniem tego polecenia za pomocą python -m pip install --upgrade pip.
pipupgrade pomaga uaktualnić system, lokalny lub pakiety z requirements.txtpliku! Selektywnie aktualizuje również pakiety, które nie psują zmian. pipupgrade zapewnia również aktualizację pakietów obecnych w wielu środowiskach Python. Kompatybilny z Python2.7 +, Python3.4 + i pip9 +, pip10 +, pip18 +, pip19 +.
W poleceniu awk NR>2pomija pierwsze dwa rekordy (wiersze) i {print $1}wybiera pierwsze słowo każdego wiersza (zgodnie z sugestią SergioAraujo, usunąłem, tail -n +3ponieważ awkrzeczywiście mogę sobie poradzić z pomijaniem rekordów).
Jeśli jedno uaktualnienie nie powiedzie się, żadna z nich nie nastąpi.
Boris
2
możesz uniknąć, że ogon awk 'NR>2 {print $1}'oczyszcza dla ciebie wyjście
SergioAraujo
@SergioAraujo, dzięki temu rozwiązanie wygląda również na czystsze, dzięki za wskazówkę!
Marc
67
Pomocna może okazać się następująca linijka:
(pip> 20,0)
pip list --format freeze --outdated | sed 's/=.*//g' | xargs -n1 pip install -U
Starsza wersja:
pip list --format freeze --outdated | sed 's/(.*//g'| xargs -n1 pip install -U
xargs -n1 kontynuuje działanie, jeśli wystąpi błąd.
Jeśli potrzebujesz większej „drobnoziarnistej” kontroli nad tym, co jest pomijane i co powoduje błąd, nie należy dodawać -n1flagi i jawnie definiować błędy do zignorowania, poprzez „potokowanie” następującej linii dla każdego oddzielnego błędu:
| sed 's/^<First characters of the error>.*//'
Oto działający przykład:
pip list --format freeze --outdated | sed 's/=.*//g'| sed 's/^<First characters of the first error>.*//'| sed 's/^<First characters of the second error>.*//'| xargs pip install -U
OSX, od lipca 2017 r., Jest wyposażony w bardzo starą wersję sed (kilkanaście lat). Aby uzyskać rozszerzone wyrażenia regularne, użyj -E zamiast -r w powyższym rozwiązaniu.
Rozwiązywanie problemów z popularnymi rozwiązaniami
To rozwiązanie jest dobrze zaprojektowane i przetestowane 1 , podczas gdy występują problemy nawet z najbardziej popularnymi rozwiązaniami.
Problemy z przenośnością spowodowane zmianą funkcji linii poleceń pip
Awaria xargs z powodu typowych błędów procesu potomnego pip lub pip3
Zatłoczone logowanie z surowego wyjścia xargs
Poleganie na mostku Python-OS podczas potencjalnej aktualizacji 3
Powyższe polecenie używa najprostszej i najbardziej przenośnej składni pip w połączeniu z sed i sh, aby całkowicie rozwiązać te problemy. Szczegóły operacji sed można sprawdzić za pomocą skomentowanej wersji 2 .
Detale
[1] Testowane i regularnie używane w klastrze Linux 4.8.16-200.fc24.x86_64 i testowane na pięciu innych odmianach Linux / Unix. Działa również na Cygwin64 zainstalowanym w systemie Windows 10. Konieczne jest przetestowanie na iOS.
[2] Aby dokładniej zobaczyć anatomię polecenia, jest to dokładny odpowiednik powyższego polecenia pip3 z komentarzami:
# match lines from pip's local package list output# that meet the following three criteria and pass the# package name to the replacement string in group 1.# (a) Do not start with invalid characters# (b) Follow the rule of no white space in the package names# (c) Immediately follow the package name with an equal sign
sed="s/^([^=# \t\\][^ \t=]*)=.*"# separate the output of package upgrades with a blank line
sed="$sed/echo"# indicate what package is being processed
sed="$sed; echo Processing \1 ..."# perform the upgrade using just the valid package name
sed="$sed; pip3 install -U \1"# output the commands
sed="$sed/p"# stream edit the list as above# and pass the commands to a shell
pip3 freeze --local |sed -rn "$sed"|sh
[3] Uaktualnienie komponentu Python lub PIP, który jest również używany do uaktualnienia komponentu Python lub PIP, może być potencjalną przyczyną impasu lub uszkodzenia bazy danych pakietu.
innym sposobem na pokonanie jurajskiego BSD sedOS X jest użycie gsed(GNU sed). Aby go zdobyć,brew install gnu-sed
Walter Tross,
@WalterTross ... Jurassic ... dobre przymiotnik. Mamy teraz dwa sposoby grupowania pakietów aktualizacji pip z ładną ścieżką audytu na terminalu. (1) Użyj opcji -E jak w odpowiedzi i (2) zainstaluj gsed, aby opuścić okres jurajski.
Otrzymałem to ostrzeżenieDEPRECATION: 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.
Reman
2
@Reman: to dlatego, że używasz Pip v9.0.1. To tylko komunikat o wycofaniu, co oznacza, że niektóre funkcje nie przetrwają w przyszłej wersji Pip. Nie ma się czym martwić;)
AlessioX,
Należy to jednak oznaczyć jako ostateczne rozwiązanie. Rzeczywiście zaakceptowana odpowiedź będzie działać na wszystkich pakietach pip, co jest stratą czasu, jeśli musisz zaktualizować tylko 1 lub 2 pakiety. To rozwiązanie, jak zamiast tego, będzie działać na wszystkich przestarzałych pakietach
AlessioX
34
Miałem ten sam problem z aktualizacją. Rzecz w tym, że nigdy nie aktualizuję wszystkich pakietów. Aktualizuję tylko to, czego potrzebuję, ponieważ projekt może się zepsuć.
Ponieważ nie było łatwego sposobu na aktualizację pakietu po pakiecie i aktualizację pliku wymagania.txt, napisałem ten program do aktualizacji requirements.txtpip, który również aktualizuje wersje w twoim pliku dla wybranych pakietów (lub wszystkich pakietów).
Instalacja
pip install pip-upgrader
Stosowanie
Aktywuj virtualenv (ważne, ponieważ zainstaluje także nowe wersje uaktualnionych pakietów w bieżącym virtualenv).
cd do katalogu projektu, a następnie uruchom:
pip-upgrade
Zaawansowane użycie
Jeśli wymagania są umieszczone w niestandardowej lokalizacji, prześlij je jako argumenty:
pip-upgrade path/to/requirements.txt
Jeśli już wiesz, jaki pakiet chcesz zaktualizować, po prostu wyślij je jako argumenty:
pip-upgrade -p django -p celery -p dateutil
Jeśli chcesz zaktualizować wersję do wersji wstępnej / późniejszej, dodaj --prereleaseargument do swojego polecenia.
główkuje za pomocą twojego narzędzia, niektóre znaki ucieczki nie działają poprawnie na moim komputerze z systemem Windows, ale poza tym jest w porządku
Luke
tak naprawdę nie testowałem tego w systemie Windows, ale zainstaluję maszynę wirtualną. Dzięki
Simion Agavriloaei,
Jeśli virtualenvnie jest włączonypip-upgrade --skip-virtualenv-check
Morse
2
Działa to również z folderem wymagań mającym wspólne, dev i prod wymagania. Po prostu świetnie!
Podczas gdy inne rozwiązania utknęły w martwym punkcie po najmniejszej anomalii, to rozwiązanie ostrzegło, a następnie pominęło problem, aby kontynuować z innymi pakietami. Świetny!
Twoja odpowiedź została zmieniona z yolkna yolk3k, twoja pierwotna odpowiedź zdecydowanie miała problemy z python3.
AXO,
10
Odpowiedź Ramany zadziałała najlepiej dla mnie tutaj, ale musiałem dodać kilka haczyków:
import pip
for dist in pip.get_installed_distributions():if'site-packages'in dist.location:try:
pip.call_subprocess(['pip','install','-U', dist.key])exceptException, exc:print exc
site-packagesCheck wyklucza moje pakiety rozwojowe, ponieważ nie znajdują się w systemowym katalogu site-packages. Try-wyjątkiem po prostu pomija pakiety, które zostały usunięte z PyPI.
@endolith: Miałem też nadzieję na łatwy pip.install(dist.key, upgrade=True), ale nie wygląda na to, że pip miał być używany przez nic poza wierszem poleceń (dokumenty nie wspominają o wewnętrznym interfejsie API, a twórcy pip nie używali dokumenty).
Na Ubuntu (i innych pochodnych Debiana) pipnajwyraźniej umieszcza pakiety w /usr/local/lib/python2.7/dist-packagespodobnych wersjach. W tym przypadku możesz użyć „/ usr / local / lib /” zamiast „site-packages” if.
usage: pip_upgrade_outdated [-h][-3|-2|--pip_cmd PIP_CMD][--serial |--parallel][--dry_run][--verbose][--version]Upgrade outdated python packages with pip.
optional arguments:-h,--help show this help message and exit
-3 use pip3
-2 use pip2
--pip_cmd PIP_CMD use PIP_CMD (default pip)--serial,-s upgrade in serial (default)--parallel,-p upgrade in parallel
--dry_run,-n get list, but don't upgrade
--verbose, -v may be specified multiple times
--version show program's version number and exit
Krok 1: Instalacja PIP-PIP-Uaktualnienie-nieaktualne Krok 2: PIP-Uaktualnienie-Nieaktualne ... Wykonane
Shao.lo
9
Wysłane poprzez prośbę do ludu pip ; w międzyczasie użyj tego rozwiązania biblioteki pip, które napisałem:
from pip import get_installed_distributions
from pip.commands import install
install_cmd = install.InstallCommand()
options, args = install_cmd.parse_args([package.project_name
for package in
get_installed_distributions()])
options.upgrade =True
install_cmd.run(options, args)# Chuck this in a try/except and print as wanted
Oto mój wynik: kerberos iwlib PyYAML Could pygpgme Could Could Could ...zanotuj wszystkie „Could”. Wywodzą się one z wyników pip list -o„Nie można znaleźć żadnych plików do pobrania, które spełniają wymagania <pakiet>”
DrStrangepork,
Czy możesz wkleić wynik pip list -o?
Alex V
Komentarze nie formatują tego dobrze, ale oto fragment # 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;
kodu
zamiast odfiltrowanie wszystkie linie, które nie powinny być używane, chciałbym zaproponować, aby odfiltrować wiersze, gdzie istnieje taka zmiana: pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ") . W przeciwnym razie możesz łatwo ominąć jedną linię, której nie chcesz, i uzyskać wynik, o którym wspomniał DrStrangeprk.
antius
Zdecydowanie polecam użycie xargszamiast tego. pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -UTe -r, zapewnia, że flaga pip install -Unie będzie działać, jeśli nie ma przestarzałe pakiety. -pFlag pyta użytkownika, aby potwierdzić przed wykonaniem jakiegokolwiek polecenia. Możesz dodać -n1flagę, aby wyświetlała monit przed instalacją każdego pakietu osobno.
Sześć
6
jedna linia w PowerShell 5.1 z uprawnieniami adm, python 3.6.5 i pip ver 10.0.1:
pip freeze
(jakbundle install
lubnpm shrinkwrap
). Najlepiej zapisać kopię tego przed majstrowaniem.pip
instalację podczas aktualizacjirequests
. Komunikat o błędzie tocannot import name IncompleteRead
.Odpowiedzi:
Nie ma jeszcze wbudowanej flagi, ale możesz jej użyć
Uwaga: istnieją nieskończone potencjalne warianty. Staram się, aby ta odpowiedź była krótka i prosta, ale proszę sugerować zmiany w komentarzach!
W starszej wersji
pip
możesz zamiast tego użyć tego:grep
Jest pominąć edytowalne ( „-e”) definicji pakietu, jak sugeruje @jawache. (Tak, można zastąpićgrep
+cut
zsed
lubawk
lubperl
lub ...).-n1
Flaga dlaxargs
zapobiega przystankach jeśli wszystko zawiedzie aktualizowania jeden pakiet (dzięki @andsens ).źródło
pip install -U
to zrobię, zaktualizuje wszystkie pakiety. Obawiam się, że może to spowodować konflikt z apt-get.tee
przed wykonaniem rzeczywistego uaktualnienia, dzięki czemu można uzyskać listę oryginalnych verisons. Np.pip freeze --local | tee before_upgrade.txt | ...
W ten sposób łatwiej byłoby cofnąć, jeśli wystąpią jakiekolwiek problemy.-H
abysudo
uniknąć irytującego komunikatu o błędzie:$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
Możesz użyć następującego kodu Python. W przeciwieństwie do
pip freeze
tego nie będzie drukować ostrzeżeń i błędów FIXME. Dla pip <10.0.1Dla pip> = 10.0.1
źródło
import pip
pip.install('packagename')
?Aby zaktualizować wszystkie lokalne pakiety; możesz użyć
pip-review
:pip-review
jest rozwidleniempip-tools
. Zobaczpip-tools
problem wspomniany przez @knedlsepp .pip-review
pakiet działa, alepip-tools
pakiet już nie działa.pip-review
działa w systemie Windows od wersji 0.5 .źródło
pip-review --local --auto
Działa w systemie Windows. Powinien być także dobry dla innych. ($ to katalog, w którym się znajdujesz, w wierszu polecenia. np. C: / Users / Username>)
zrobić
otwórz plik tekstowy, wymienić
==
się>=
i wykonaćJeśli masz problem z pewnym pakietem opóźniającym aktualizację (czasami numpy), po prostu przejdź do katalogu ($), skomentuj nazwę (dodaj # przed nim) i ponownie uruchom aktualizację. Możesz później cofnąć komentarz do tej sekcji. Jest to również świetne do kopiowania globalnych środowisk Pythona.
Inny sposób:
Podoba mi się również metoda recenzji pip:
Możesz wybrać „a”, aby zaktualizować wszystkie pakiety; jeśli jedno uaktualnienie nie powiedzie się, uruchom je ponownie i będzie kontynuowane przy następnym.
źródło
requirements.txt
„s=={version}
. Na przykład:python-dateutil==2.4.2
abypython-dateutil
na wszystkich liniach.$ pip freeze | cut -d '=' -f1> requirements.txt
w celu usunięcia wersjipip3 install -r <(pip3 freeze) --upgrade
Efektywnie,<(pip3 freeze)
jest anonimowym potokiem, ale będzie działał jako obiekt plikuWersja dla Windows po konsultacji doskonałą dokumentację dla
FOR
Roba van der Woudeźródło
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i
Szybciej, ponieważ spróbuje jedynie zaktualizować „przestarzałe” pakietyfor /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i
. Jeśli jest uruchamiany z pliku wsadowego, użyj go%%i
zamiast%i
. Należy również pamiętać, że łatwiej jest zaktualizowaćpip
przed uruchomieniem tego polecenia za pomocąpython -m pip install --upgrade pip
.Użyj pipupgrade !
pipupgrade pomaga uaktualnić system, lokalny lub pakiety z
requirements.txt
pliku! Selektywnie aktualizuje również pakiety, które nie psują zmian. pipupgrade zapewnia również aktualizację pakietów obecnych w wielu środowiskach Python. Kompatybilny z Python2.7 +, Python3.4 + i pip9 +, pip10 +, pip18 +, pip19 +.UWAGA: Jestem autorem narzędzia.
źródło
Checking...
zawsze, kiedy go wypróbowałem.[0;93mChecking...[0m
ModuleNotFoundError: No module named 'ctypes.windll'
Możesz po prostu wydrukować nieaktualne pakiety
źródło
pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
python -m pip list outdated
(chociaż nie jest w formacie wymagań).Ta opcja wydaje mi się prostsza i czytelniejsza:
Wyjaśnienie jest takie, że
pip list --outdated
wyświetla listę wszystkich nieaktualnych pakietów w tym formacie:W poleceniu awk
NR>2
pomija pierwsze dwa rekordy (wiersze) i{print $1}
wybiera pierwsze słowo każdego wiersza (zgodnie z sugestią SergioAraujo, usunąłem,tail -n +3
ponieważawk
rzeczywiście mogę sobie poradzić z pomijaniem rekordów).źródło
awk 'NR>2 {print $1}'
oczyszcza dla ciebie wyjściePomocna może okazać się następująca linijka:
(pip> 20,0)
pip list --format freeze --outdated | sed 's/=.*//g' | xargs -n1 pip install -U
xargs -n1
kontynuuje działanie, jeśli wystąpi błąd.Jeśli potrzebujesz większej „drobnoziarnistej” kontroli nad tym, co jest pomijane i co powoduje błąd, nie należy dodawać
-n1
flagi i jawnie definiować błędy do zignorowania, poprzez „potokowanie” następującej linii dla każdego oddzielnego błędu:| sed 's/^<First characters of the error>.*//'
Oto działający przykład:
źródło
| sed 's/^<First characters of the error>.*//'
ile potrzeba. Dziękuję Ci!pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
Bardziej niezawodne rozwiązanie
W przypadku pip3 użyj tego:
W przypadku pip, po prostu usuń 3 jako takie:
OSX Oddity
OSX, od lipca 2017 r., Jest wyposażony w bardzo starą wersję sed (kilkanaście lat). Aby uzyskać rozszerzone wyrażenia regularne, użyj -E zamiast -r w powyższym rozwiązaniu.
Rozwiązywanie problemów z popularnymi rozwiązaniami
To rozwiązanie jest dobrze zaprojektowane i przetestowane 1 , podczas gdy występują problemy nawet z najbardziej popularnymi rozwiązaniami.
Powyższe polecenie używa najprostszej i najbardziej przenośnej składni pip w połączeniu z sed i sh, aby całkowicie rozwiązać te problemy. Szczegóły operacji sed można sprawdzić za pomocą skomentowanej wersji 2 .
Detale
[1] Testowane i regularnie używane w klastrze Linux 4.8.16-200.fc24.x86_64 i testowane na pięciu innych odmianach Linux / Unix. Działa również na Cygwin64 zainstalowanym w systemie Windows 10. Konieczne jest przetestowanie na iOS.
[2] Aby dokładniej zobaczyć anatomię polecenia, jest to dokładny odpowiednik powyższego polecenia pip3 z komentarzami:
[3] Uaktualnienie komponentu Python lub PIP, który jest również używany do uaktualnienia komponentu Python lub PIP, może być potencjalną przyczyną impasu lub uszkodzenia bazy danych pakietu.
źródło
sed
OS X jest użyciegsed
(GNU sed). Aby go zdobyć,brew install gnu-sed
To wydaje się bardziej zwięzłe.
Wyjaśnienie:
pip list --outdated
dostaje takie linieW
cut -d ' ' -f1
,-d ' '
zestawy „przestrzeń” jako separatora,-f1
środki, aby uzyskać pierwszą kolumnę.Tak więc powyższe linie stają się:
następnie przekaż je, aby
xargs
uruchomić poleceniepip install -U
, z każdą linią jako argumentami-n1
ogranicza liczbę argumentów przekazywanych do każdego poleceniapip install -U
do 1źródło
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.
Miałem ten sam problem z aktualizacją. Rzecz w tym, że nigdy nie aktualizuję wszystkich pakietów. Aktualizuję tylko to, czego potrzebuję, ponieważ projekt może się zepsuć.
Ponieważ nie było łatwego sposobu na aktualizację pakietu po pakiecie i aktualizację pliku wymagania.txt, napisałem ten program do aktualizacji
requirements.txt
pip, który również aktualizuje wersje w twoim pliku dla wybranych pakietów (lub wszystkich pakietów).Instalacja
Stosowanie
Aktywuj virtualenv (ważne, ponieważ zainstaluje także nowe wersje uaktualnionych pakietów w bieżącym virtualenv).
cd
do katalogu projektu, a następnie uruchom:Zaawansowane użycie
Jeśli wymagania są umieszczone w niestandardowej lokalizacji, prześlij je jako argumenty:
Jeśli już wiesz, jaki pakiet chcesz zaktualizować, po prostu wyślij je jako argumenty:
Jeśli chcesz zaktualizować wersję do wersji wstępnej / późniejszej, dodaj
--prerelease
argument do swojego polecenia.Pełne ujawnienie: Napisałem ten pakiet.
źródło
virtualenv
nie jest włączonypip-upgrade --skip-virtualenv-check
Od https://github.com/cakebread/yolk :
jednak najpierw musisz zdobyć żółtko:
źródło
Jednowierszowa wersja odpowiedzi @ Ramana .
`
źródło
sudo pip install
używaj zamiast tego wirtualnej env .podczas korzystania z virtualenv i jeśli chcesz po prostu zaktualizować pakiety dodane do virtualenv, możesz zrobić:
źródło
Najprostszym i najszybszym rozwiązaniem, które znalazłem w dyskusji na temat pipa jest:
Źródło: https://github.com/pypa/pip/issues/3819
źródło
Rozwiązanie Windows Powershell
źródło
pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}
?pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}
byłoby bardziej odpowiednie.użyj pakietów aktualizacji awk:
pip install -U $(pip freeze | awk -F'[=]' '{print $1}')
aktualizacja Windows PowerShell
foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}
źródło
Możesz spróbować:
źródło
Niesamowite żółtko ułatwia to.
Więcej informacji na temat żółtka: https://pypi.python.org/pypi/yolk/0.4.3
Może robić wiele rzeczy, które prawdopodobnie okażą się przydatne.
źródło
yolk
nayolk3k
, twoja pierwotna odpowiedź zdecydowanie miała problemy z python3.Odpowiedź Ramany zadziałała najlepiej dla mnie tutaj, ale musiałem dodać kilka haczyków:
site-packages
Check wyklucza moje pakiety rozwojowe, ponieważ nie znajdują się w systemowym katalogu site-packages. Try-wyjątkiem po prostu pomija pakiety, które zostały usunięte z PyPI.@endolith: Miałem też nadzieję na łatwy
pip.install(dist.key, upgrade=True)
, ale nie wygląda na to, że pip miał być używany przez nic poza wierszem poleceń (dokumenty nie wspominają o wewnętrznym interfejsie API, a twórcy pip nie używali dokumenty).źródło
pip
najwyraźniej umieszcza pakiety w/usr/local/lib/python2.7/dist-packages
podobnych wersjach. W tym przypadku możesz użyć „/ usr / local / lib /” zamiast „site-packages”if
.pip_upgrade_outdated
Spełnia swoje zadanie. Według jego dokumentów :Krok 1:
Krok 2:
źródło
Wysłane poprzez prośbę do ludu pip ; w międzyczasie użyj tego rozwiązania biblioteki pip, które napisałem:
źródło
Wydawało mi się, że to działa ...
printf
Następnie użyłem spacji, aby poprawnie oddzielić nazwy pakietów.źródło
To jest rozwiązanie PowerShell dla Pythona 3:
A dla Python 2:
To aktualizuje pakiety jeden po drugim. Więc
następnie należy upewnić się, że żadne zależności nie zostaną zerwane.
źródło
Co powiesz na:
źródło
Najkrótszy i najłatwiejszy w systemie Windows.
źródło
Mój skrypt:
źródło
Czy to nie jest bardziej skuteczne?
pip list -o
wyświetla nieaktualne pakiety;grep -v -i warning
odwrócone dopasowanie włączone,warning
aby uniknąć błędów podczas aktualizacjicut -f1 -d1' '
zwraca pierwsze słowo - nazwę nieaktualnego pakietu;tr "\n|\r" " "
konwertuje wynik multilinii z listycut
jednowierszowej, oddzielonej spacjami;awk '{if(NR>=3)print}'
pomija linie nagłówkacut -d' ' -f1
pobiera pierwszą kolumnęxargs -n1 pip install -U
pobiera 1 argument z potoku po lewej stronie i przekazuje go do polecenia aktualizacji listy pakietów.źródło
kerberos iwlib PyYAML Could pygpgme Could Could Could ...
zanotuj wszystkie „Could”. Wywodzą się one z wynikówpip list -o
„Nie można znaleźć żadnych plików do pobrania, które spełniają wymagania <pakiet>”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" " ")
. W przeciwnym razie możesz łatwo ominąć jedną linię, której nie chcesz, i uzyskać wynik, o którym wspomniał DrStrangeprk.xargs
zamiast tego.pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U
Te-r
, zapewnia, że flagapip install -U
nie będzie działać, jeśli nie ma przestarzałe pakiety.-p
Flag pyta użytkownika, aby potwierdzić przed wykonaniem jakiegokolwiek polecenia. Możesz dodać-n1
flagę, aby wyświetlała monit przed instalacją każdego pakietu osobno.jedna linia w PowerShell 5.1 z uprawnieniami adm, python 3.6.5 i pip ver 10.0.1:
działa płynnie, jeśli na liście nie ma uszkodzonych paczek lub specjalnych kół ...
źródło