Tüm Python paketlerini pip ile nasıl yükseltebilirim?


2050

Tüm Python paketlerini aynı anda yükseltmek mümkün müdür pip?

Not : Resmi sorun izleyicide bunun için bir özellik isteği olduğunu unutmayın .


37
Yazılım çürümesine dikkat edin; yükseltme bağımlılıkları uygulamanızı bozabilir. Kurulu tüm paketlerin tam sürümünü pip freeze( bundle installveya gibi npm shrinkwrap) ile listeleyebilirsiniz . Tamir etmeden önce bunun bir kopyasını kaydetmek en iyisidir.
Albay Panik

Bunu yaparken dikkatli olun pip, yükselttiğinizde kurulumunuzu vidalayın requests. Hata mesajı cannot import name IncompleteRead.
Paul Rooney

11
Bir sürü cevap denedim ve daha yeni (ve dolayısıyla düşük puanlı cevap) çok daha iyi bir çıktı üretti: stackoverflow.com/questions/2720014/…
FauChristian

Güncel özellik isteği ve tartışma: github.com/pypa/pip/issues/4551
cledoux

Bu soru hem çok eski hem de çok kullanışlı, şu andan itibaren buraya gelenleri uyarmak istiyorum, şimdi tüm bunları yapmanın yeni bir resmi en iyi yolu var: pipenv. Dokümanlar burada: docs.pipenv.org/basics ve yazarın Pycon 2018 bunun hakkında konuşuyor: youtube.com/watch?v=GBQAKldqgZs . Mutlu kodlama!
Malik

Yanıtlar:


2259

Henüz yerleşik bir bayrak yok, ancak

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

Not: Bunun için sonsuz potansiyel varyasyonları vardır. Bu cevabı kısa ve basit tutmaya çalışıyorum, ancak lütfen yorumlarda varyasyonlar önerin!

Eski sürümünde, pipbunun yerine şunu kullanabilirsiniz:

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

grep@Jawache tarafından önerildiği gibi, düzenlenebilir ( "-e") paket tanımlarını atlamak etmektir. (Evet, grep+ cutile sedveya awkveya perlveya ... 'yi değiştirebilirsiniz .).

-n1İçin bayrak xargstek paketi güncellemeden eğer her şeyi durdurma önler (teşekkürler başarısız @andsens ).


59
Doğru :( Sorun şimdi github.com/pypa/pip/issues/59 adresinde yaşıyor . Ancak her öneri "Evet, ama X'in Y'yi yapmanın doğru yolu olup olmadığından eminim ..." Pratiklik saflığı yener mi ?:(
rbp

20
Ayrıca, normal bir paket yöneticisi (apt-get veya Synaptic gibi) ile yüklenen paketleri de yazdırır. Bunu yürütürsem pip install -U, tüm paketleri güncelleyecektir. Korkarım apt-get ile bazı çatışmalara neden olabilir.
Jabba

8
Nasıl grep değiştirme hakkında: egrep -v '^ (\ - e | #)' (ubuntu 12.10 üzerinde çalışırken ben bu hat almak. "## FIXME: Bu paket için dependency_links svn URL'yi bulamadık:"
LasseValentini

32
teeOrijinal sürümlerin bir listesini alabilmek için gerçek yükseltmeyi yapmadan önce atarım . Örneğin pip freeze --local | tee before_upgrade.txt | ..., herhangi bir sorun varsa geri döndürmek daha kolay olurdu.
Emil H

10
Eklediğim -Hiçin sudo: sinir bozucu bir hata mesajı önlemek için $ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
Mario S

683

Aşağıdaki Python kodunu kullanabilirsiniz. Bunun aksine pip freeze, uyarılar ve FIXME hataları yazdırılmaz. Pip <10.0.1 için

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)

Pip için> = 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)

21
Bu inanılmaz derecede iyi çalışıyor… Bir görevin GERÇEKTEN uzun zaman alması ve size bir sürü yeni şey vermesi her zaman çok tatmin edicidir ! PS: OS X kullanıyorsanız root olarak çalıştırın!
Alex Gray

52
Alt süreci çağırmadan pip kullanarak kurulum yapmanın bir yolu yok mu? Gibi bir şey import pip pip.install('packagename')?
endolit

6
Bunu bir fabfile.py içine sardım . Teşekkürler!
Josh K

5
@BenMezger: Virtualenv'inizde gerçekten sistem paketleri kullanmamalısınız. Ayrıca kök olarak güvenilir, iyi bilinen birkaç programdan daha fazlasını çalıştırmamalısınız. Sanal arayüzlerinizi --no-site-Packages (son sürümlerde varsayılan) ile çalıştırın.
jeffcook2150

3
Bunun için, bir paket daha fazla bulunamazsa, seçilen cevap (yukarıda) başarısız olur. Bu komut dosyası bir sonraki paketlere devam ediyor, harika.
Josh

643

Tüm yerel paketleri yükseltmek için; kullanabilirsiniz pip-review:

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

pip-reviewbir çatal pip-tools. @Knedlsepp tarafından bahsedilen pip-toolskonuya bakın . paket çalışıyor ancak paket artık çalışmıyor.pip-reviewpip-tools

pip-review0.5 sürümünden beri Windows üzerinde çalışıyor .


2
@hauzer: Python 3'ü desteklemiyor. Yine de bir hata olabilir
jfs

7
@mkoistinen Bu iyi bir araçtır, ancak PIP içinde birleştirilene kadar herkesin yapmak isteyebileceği ek bir şey yüklemek anlamına gelir.
Wernight

2
@Daniel: pip-tools artık çalışmıyor, pip-review (pip-tools çatalı) çalışıyor.
jfs

7
pip-review gayet iyi çalışıyor (en azından Python sürüm 3.5.0 için)
FredrikHedman

15
Etkileşimli mod olmadan tümünü güncellemek için:pip-review --local --auto
Dlamini

333

Windows üzerinde çalışır. Başkaları için de iyi olmalı. ($ komut satırında hangi dizinde olursanız olun. örn. C: / Users / Username>)

yapmak

$ pip freeze > requirements.txt

metin dosyasını açmak yerine ==sahip >=ve yürütmek

$ pip install -r requirements.txt --upgrade

Yükseltmeyi durduran belirli bir paketle ilgili bir sorununuz varsa (bazen numpy), sadece dizine ($) gidin, adı yorumlayın (önüne bir # ekleyin) ve yükseltmeyi tekrar çalıştırın. Daha sonra bu bölümü geri alabilirsiniz. Bu, python global ortamlarını kopyalamak için de harikadır.


Diğer yol:

Ben de pip-inceleme yöntemi gibi:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

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

Tüm paketleri yükseltmek için 'a' seçebilirsiniz; bir yükseltme başarısız olursa, tekrar çalıştırın ve bir sonraki güncellemede devam eder.


29
requirements.txt'Sini kaldırmalısınız =={version}. Örneğin: python-dateutil==2.4.2için python-dateutiltüm hatlar için.
youngminz

4
Bunun aslında macOS'taki paketleri yükseltmediğini buldum.
jkooker

10
@youngminz Bunu düzeltmek için 'pip install ...' komutunu çalıştırmadan önce editörünüzde / ide'de hızlı bir 'Tümünü değiştir "=="> "> ="' ı öneririm
Amaury Liet

7
linux için: $ pip freeze | cut -d '=' -f1> requirements.txtsürümü kaldırmak için
Cavaz

1
Kullandığınız kabuk bash ise, pip3 install -r <(pip3 freeze) --upgrade Effective yoluyla tek bir komuta kısaltabilirsiniz , <(pip3 freeze)anonim bir borudur, ancak bir dosya nesnesi olarak işlev görür
Sergiy Kolodyazhnyy

128

Rob van der Woude için mükemmel belgelereFOR başvurduktan sonra Windows sürümü

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

19
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i Daha hızlı beri olacak sadece denemek ve güncelleme "modası geçmiş" paketleri
Refael Ackermann

3
@RefaelAckermann Bunun orijinalinden daha yavaş olacağından şüpheleniyorum :) Hangi paketlerin modası geçmiş olduğunu bilmek için pip her paketin en son sürümünün ne olduğunu kontrol etmelidir. Güncelleme sırasındaki ilk adımla tamamen aynıdır ve daha yeni bir sürüm yoksa devam etmez. Ancak sürümünüzde pip, sürümleri iki kez, eski paketlerin listesini ilk kez ve bu listedeki paketleri güncellerken ikinci kez kontrol edecektir.
Piotr Dobrogost

2
@ RefaelAckermann Pip döndürme, bir paketin ağ üzerinden sürümünü kontrol etmekten daha hızlı bir büyüklük sırasıdır, bu nedenle, spin up sayısı değil optimize edilmesi gereken kontrol sayısıdır. Benimki n kontrol yapar, seninki n + m kontrol yapar.
Piotr Dobrogost

2
+1 - 6.20.2019, WIndows 10'da Python 3.7.3 kullanıyorum ve bu tüm yerel paketlerimi güncellememin en iyi yoluydu.
MacItaly

1
Çıktısının ilk iki satırı atlamak gerekiyor: for /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i. Bu bir toplu iş dosyasından çalıştırılırsa, kullandığınızdan emin olun %%iyerine %i. Ayrıca pipbu komutu kullanarak çalıştırmadan önce güncellemenin daha temiz olduğunu unutmayın python -m pip install --upgrade pip.
Andy

126

Pipupgrade kullan !

$ pip install pipupgrade
$ pipupgrade --verbose --latest --yes

pipupgrade , sisteminizi, yerel veya paketlerinizi bir requirements.txtdosyadan yükseltmenize yardımcı olur ! Ayrıca, değişikliği bozmayan paketleri seçici olarak yükseltir. pipupgrade ayrıca birden fazla Python ortamında bulunan paketlerin yükseltilmesini sağlar. Python2.7 +, Python3.4 + ve pip9 +, pip10 +, pip18 +, pip19 + ile uyumludur.

resim açıklamasını buraya girin

NOT: Aracın yazarıyım.


1
Bu yöntemin @ rbp'nin cevabından çok daha temiz bir çıktısı var
Gaia

7
Güzel fikir, ama Checking...denediğimde sonsuza kadar sıkışmış .
CGFoX

1
Sadece yükledi ve ayrıca kontrol altında kaldı[0;93mChecking...[0m
Chris

1
@nathandrake sorunlar sayfasında bir sorun açmak ister misiniz?
Achilles Gasper Rasquinha

2
Windows 10 ve Python 3.7.5'te bir hata var:ModuleNotFoundError: No module named 'ctypes.windll'
Qin Heyang

74

Sadece eski olan paketleri yazdırabilirsiniz

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

14
Bir virtualenv içinde bunu şöyle yaparım:pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
Jeremy Blanchard

Günümüzde bunu python -m pip list outdated(gereksinim biçiminde olmasa da) ile de yapabilirsiniz .
Jacktose

74

Bu seçenek bana daha basit ve okunabilir görünüyor:

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

Açıklama şu pip list --outdatedbiçimdeki tüm güncel olmayan paketlerin bir listesini çıkarır:

Package   Version Latest Type 
--------- ------- ------ -----
fonttools 3.31.0  3.32.0 wheel
urllib3   1.24    1.24.1 wheel
requests  2.20.0  2.20.1 wheel

Awk komutunda, NR>2ilk iki kayıt (satır) ve atlar {print $1}(SergioAraujo önerdiği gibi kaldırıldı, seçer her satırın ilk kelime tail -n +3yana awkgerçekten atlama kayıtları işleyebilir).


Bir yükseltme başarısız olursa, yükseltmelerin hiçbiri gerçekleşmez.
Boris

2
kuyruk önleyebilirsiniz sizin awk 'NR>2 {print $1}'için çıktı temizler
SergioAraujo

@SergioAraujo, bu çözüm de daha temiz görünüyor, ipucu için teşekkürler!
Marc

67

Aşağıdaki tek astar yardımcı olabilir:

(pip> 20.0)

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

Eski versiyonlar:

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

xargs -n1 bir hata oluşursa devam eder.

Atlanan ve neyin hata çıkardığı konusunda daha "ince taneli" kontrole ihtiyacınız varsa -n1, her ayrı hata için aşağıdaki satırı "borulandırarak" bayrağı eklememeli ve yoksaymak için hataları açıkça tanımlamamalısınız:

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

İşte çalışan bir örnek:

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

Görünüşe göre pip stdout'a uyarı gönderdiği için 'Could' ve 'Some' ile başlayan satırlar için filtreler eklemek zorunda kaldım :(
Chip Camden

Tamam, bu adil: | sed 's/^<First characters of the error>.*//'Gerektiği kadar ekleyebilirsiniz . Teşekkür ederim!
raratiru

14
Veya:pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
Jens

51

Daha Sağlam Çözüm

Pip3 için bunu kullanın:

pip3 freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip3 install -U \1/p' |sh

Pip için, 3'leri şu şekilde çıkarın:

pip freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip install -U \1/p' |sh

OSX Tuhaflığı

OSX, Temmuz 2017 itibariyle, sed'in çok eski bir sürümüyle (bir düzine yaşında) birlikte gelir. Genişletilmiş düzenli ifadeler almak için yukarıdaki çözümde -r yerine -E kullanın.

Popüler Çözümlerle Sorun Çözme

Bu çözüm iyi tasarlanmış ve test edilmiştir 1 , oysa en popüler çözümlerde bile problemler vardır.

  • Pip komut satırı özelliklerinin değiştirilmesi nedeniyle taşınabilirlik sorunları
  • Ortak pip veya pip3 alt işlem hataları nedeniyle xargs'ın çökmesi
  • Ham xargs çıktısından kalabalık günlük kaydı
  • Potansiyel olarak yükseltme yaparken Python-OS köprüsüne güvenme 3

Yukarıdaki komut, bu sorunların tamamen üstesinden gelmek için sed ve sh ile birlikte en basit ve en taşınabilir pip sözdizimini kullanır. Sed operasyonunun detayları yorumlanan versiyon 2 ile incelenebilir .


ayrıntılar

[1] Bir Linux 4.8.16-200.fc24.x86_64 kümesinde test edildi ve düzenli olarak kullanıldı ve diğer beş Linux / Unix çeşidinde test edildi. Ayrıca Windows 10'da yüklü Cygwin64 üzerinde çalışır. İOS'ta test yapılması gerekir.

[2] Komutun anatomisini daha net görmek için, yukarıdaki pip3 komutunun yorumlarla tam eşdeğeridir:

# 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] Python veya PIP bileşeninin yükseltilmesinde de kullanılan bir Python veya PIP bileşeninin yükseltilmesi, kilitlenme veya paket veritabanı bozulmasının olası bir nedeni olabilir.


1
sedOS X'in jurassic BSD'sinin üstesinden gelmenin bir başka yolu gsedbunun yerine (GNU sed) kullanmaktır. Almak için,brew install gnu-sed
Walter Tross

@WalterTross ... Jurassic ... iyi sıfat kullanımı. Şimdi, güncelleme pip paketlerini terminalde güzel bir denetim izi ile gruplamanın iki yolu var. (1) Cevapta olduğu gibi -E seçeneğini kullanın ve (2) Jurassic döneminden çıkmak için gsed yükleyin.
Douglas Daseeco

41

Bu daha özlü görünüyor.

pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U

Açıklama:

pip list --outdated bunlar gibi çizgiler alır

urllib3 (1.7.1) - Latest: 1.15.1 [wheel]
wheel (0.24.0) - Latest: 0.29.0 [wheel]

İçinde cut -d ' ' -f1, -d ' '"boşluk" u sınırlayıcı olarak ayarlar -f1, ilk sütunu almak anlamına gelir.

Böylece yukarıdaki satırlar olur:

urllib3
wheel

daha sonra her satırı ekleyen bağımsız değişkenler olarak xargskomutu çalıştırmak için pip install -Uiletin

-n1her bir komuta iletilen argüman sayısını sınırlamak pip install -U1


Bu uyarıyı aldımDEPRECATION: 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: Bunun nedeni Pip v9.0.1 kullanmanızdır. Bu sadece bir kullanımdan kaldırma mesajıdır, bu da bazı işlevlerin gelecekteki bir Pip sürümünde hayatta kalmayacağı anlamına gelir. Hakkında endişelenecek bir şey yok;)
AlessioX

Ancak, bunun nihai çözüm olarak işaretlenmesi gerekir. Aslında kabul edilen cevap pip paketlerinizin her yerinde çalışacaktır, bu sadece 1 veya 2 paketi güncellemeniz gerektiğinde zaman kaybıdır. Bu çözüm, bunun yerine, eski paketlerin hemen hemen hepsinde çalışacak
AlessioX

34

Yükseltme ile aynı sorunu vardı. Şey, ben asla tüm paketleri yükseltmek. Sadece ihtiyacım olanı yükseltirim, çünkü proje bozulabilir.

Yükseltme paketi ile paket ve requirements.txt dosyasını güncellemek için kolay bir yolu olmadığı için, ben yazdım pip-Güncelleyicisine da içinde sürümlerini güncelleyen requirements.txtdosyası seçilen paketler (veya tüm paketler) için.

Kurulum

pip install pip-upgrader

kullanım

Virtualenv'inizi etkinleştirin (önemli, çünkü mevcut virtualenv'e yükseltilen paketlerin yeni sürümlerini de yükleyecektir).

cd proje dizininize ekleyin ve çalıştırın:

pip-upgrade

Gelişmiş kullanım

Gereksinimler standart olmayan bir konuma yerleştirilirse, bunları bağımsız değişken olarak gönderin:

pip-upgrade path/to/requirements.txt

Hangi paketi yükseltmek istediğinizi zaten biliyorsanız, bunları bağımsız değişken olarak gönderin:

pip-upgrade -p django -p celery -p dateutil

Sürüm öncesi / sürüm sonrası sürüme yükseltmeniz gerekiyorsa --prerelease, komutunuza argüman ekleyin .

Tam açıklama: Bu paketi yazdım.


8
Pip'in varsayılan olarak yapması gereken budur.
Nostalg.io

bazı karakter kaçar penceremde doğru çalışmıyor gibi görünüyor ama bunun dışında iyi
Luke

Windows üzerinde gerçekten test etmedim, ama sanal bir makine kuracağım. Teşekkürler
Simion Agavriloaei

Eğer virtualenvetkin değilpip-upgrade --skip-virtualenv-check
Morse

2
Bu, ortak, dev ve prod gereksinimlerine sahip bir gereksinimler klasörü ile de çalışır. Tek kelimeyle harika!
cwhisperer



22

bir virtualenv kullanırken ve sadece virtualenv'inize eklenen paketleri yükseltmek istiyorsanız, aşağıdakileri yapmak isteyebilirsiniz:

pip install `pip freeze -l | cut --fields=1 -d = -` --upgrade


18

Windows Powershell çözümü

pip freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}

pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}?
Foad

2
Belki pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}daha uygun olur.
brainplot

16

awk güncelleme paketlerini kullanın: pip install -U $(pip freeze | awk -F'[=]' '{print $1}')

windows powershell güncelleme foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}


pip dondurma | awk -F '[=]' '{print $ 1}' | xargs pip install -U
JohnDHH

Ve python 3 için ... pip3 install -U $ (pip3 donma | awk -F '[=]' '{print $ 1}')
Jimmy MG Lim

12

Bunu deneyebilirsiniz:

for i in ` pip list|awk -F ' ' '{print $1}'`;do pip install --upgrade $i;done

bu, pip paketlerini en fazla miktarda güncellemenin en temiz, en okunabilir yoludur. harika.
Mark Shust M.academy'de

12

Oldukça şaşırtıcı sarısı bunu kolaylaştırıyor.

pip install yolk3k # don't install `yolk`, see https://github.com/cakebread/yolk/issues/35
yolk --upgrade

Sarısı hakkında daha fazla bilgi için: https://pypi.python.org/pypi/yolk/0.4.3

Yararlı bulacağınız birçok şey yapabilir.


3
Yanıtınız olarak değiştirildi yolkiçin yolk3k, orijinal cevap kesinlikle python3 ile sorunları vardı.
AXO

10

@ Ramana'nın cevabı benim için, buradakilerin en iyisi oldu, ancak birkaç catch eklemem gerekti:

import pip
for dist in pip.get_installed_distributions():
    if 'site-packages' in dist.location:
        try:
            pip.call_subprocess(['pip', 'install', '-U', dist.key])
        except Exception, exc:
            print exc

site-packagesBunlar sistem site paketleri dizininde yer alan olmadığı için onay, benim geliştirme paketlerini dışlar. Try-hariç, PyPI'den kaldırılan paketleri atlar.

@endolith: Ben de kolay bir şey umuyordum pip.install(dist.key, upgrade=True), ama pip komut satırından başka bir şey tarafından kullanılmak üzere tasarlanmış gibi görünmüyor (dokümanlar dahili API'den bahsetmiyor ve pip geliştiricileri kullanmadı Docstringler).


Ubuntu'da (ve diğer Debian türevlerinde), pipgörünüşe göre paketleri /usr/local/lib/python2.7/dist-packagesveya benzerlerini koyar . ifBu durumda ifadede 'site paketleri' yerine '/ usr / local / lib /' kullanabilirsiniz .
drevicko

10

pip_upgrade_outdatedİşi yapar. Dokümanlarına göre :

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

Aşama 1:

pip install pip-upgrade-outdated

Adım 2:

pip_upgrade_outdated

1
Adım 1: pip yükleme pip-yükseltme-modası Adım 2: pip-yükseltme-modası geçmiş ... bitti
shao.lo

9

Pip halkına çekme isteği ile gönderilir ; Bu arada yazdığım bu pip kütüphanesi çözümünü kullanın:

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

Hata işleme içeren sürüm (yoruma göre): gist.github.com/SamuelMarks/7885f2e8e5f0562b1063
Samuel Marks

9

Bu benim için işe yarıyor gibiydi ...

pip install -U $(pip list --outdated|awk '{printf $1" "}')

Daha printfsonra paket adlarını düzgün bir şekilde ayırmak için boşluk kullandım .


7

Bu, Python 3 için bir PowerShell çözümüdür:

pip3 list --outdated --format=legacy | ForEach { pip3 install -U $_.split(" ")[0] }

Ve Python 2 için:

pip2 list --outdated --format=legacy | ForEach { pip2 install -U $_.split(" ")[0] }

Bu paketleri tek tek yükseltir. Yani bir

pip3 check
pip2 check

daha sonra hiçbir bağımlılığın bozulmadığından emin olunmalıdır.



7

Windows'da en kısa ve en kolay.

pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt

Windows 7'de Enkouyami bu komut -r olmadan çalışmaz. -r, gereksinimler dosyasının yolunu engellemelidir.
Chockomonkey

6

Senaryom:

pip list --outdated --format=legacy | cut -d ' ' -f1 | xargs -n1 pip install --upgrade

6

Bu daha etkili değil mi?

pip3 list -o | grep -v -i warning | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U 
  1. pip list -o güncel olmayan paketleri listeler;
  2. grep -v -i warningwarninggüncelleme sırasında hatalardan kaçınmak için ters eşleşme
  3. cut -f1 -d1' ' ilk kelimeyi döndürür - eski paketin adı;
  4. tr "\n|\r" " "çok satırlı sonucu cuttek satır, boşlukla ayrılmış bir listeye dönüştürür;
  5. awk '{if(NR>=3)print}' başlık satırlarını atlar
  6. cut -d' ' -f1 ilk sütunu getirir
  7. xargs -n1 pip install -U soldaki borudan 1 argüman alır ve paket listesini yükseltmek için komuta iletir.

İşte benim çıktı: kerberos iwlib PyYAML Could pygpgme Could Could Could ...Tüm "olabilir" Not. Bu çıktılar pip list -o"<package> gereksinimini karşılayan herhangi bir indirme
bulunamadı

Çıktısını yapıştırabilir misiniz pip list -o?
Alex V

Yorumlar bunu iyi biçimlendirmiyor, ancak burada bir snippet (satır sonları ';' ile işaretlenmiştir):# 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;
DrStrangepork

yerine kullanılmamalıdır tüm satırları filtreleyerek, ben bir güncelleme var satırları filtrelemek için öneririm: pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ") . Aksi takdirde, istemediğiniz bir satırı kolayca kaçırabilir ve DrStrangeprk'in bahsettiği sonucu alabilirsiniz.
antibus

Bunun xargsyerine kullanmanızı şiddetle tavsiye ederim . Bayrak olmasını sağlar hiçbir eski paketleri varsa çalıştırmak edilmeyecektir. İşaretin herhangi komutu yürütmeden önce onaylayın ister. Her paketi ayrı olarak kurmadan önce uyarmak için bayrağı ekleyebilirsiniz . pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U-rpip install -U-p-n1
Altı

6

powershell 5.1'de adm haklarına sahip bir satır, python 3.6.5 ve 10.0.1 pip ver:

pip list -o --format json | ConvertFrom-Json | foreach {pip install $_.name -U --no-warn-script-location}

listede kırık paketler veya özel tekerlekler yoksa sorunsuz çalışır ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.