Apakah mungkin untuk meningkatkan semua paket Python sekaligus pip
?
Catatan : bahwa ada permintaan fitur untuk ini pada pelacak masalah resmi.
Apakah mungkin untuk meningkatkan semua paket Python sekaligus pip
?
Catatan : bahwa ada permintaan fitur untuk ini pada pelacak masalah resmi.
pip freeze
(sukabundle install
ataunpm shrinkwrap
). Terbaik untuk menyimpan salinan itu sebelum bermain-main.pip
instalasi Anda , ketika Anda meningkatkanrequests
. Pesan kesalahannya adalahcannot import name IncompleteRead
.Jawaban:
Belum ada bendera bawaan, tetapi Anda dapat menggunakannya
Catatan: ada variasi potensial tak terbatas untuk ini. Saya mencoba untuk membuat jawaban ini singkat dan sederhana, tetapi tolong sarankan variasi dalam komentar!
Di versi yang lebih lama
pip
, Anda bisa menggunakan ini:The
grep
adalah untuk melewati diedit ( "-e") paket definisi, seperti yang disarankan oleh @jawache. (Ya, Anda bisa menggantikangrep
+cut
dengansed
atauawk
atauperl
atau ...).The
-n1
bendera untukxargs
mencegah menghentikan segala sesuatu jika memperbarui satu paket gagal (terima kasih @andsens ).sumber
pip install -U
, itu akan memperbarui semua paket. Saya khawatir ini dapat menyebabkan beberapa konflik dengan apt-get.tee
sebelum melakukan upgrade yang sebenarnya sehingga Anda bisa mendapatkan daftar verison asli. Misalnyapip freeze --local | tee before_upgrade.txt | ...
Dengan cara itu akan lebih mudah untuk mengembalikan jika ada masalah.-H
untuksudo
menghindari pesan kesalahan yang mengganggu:$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
Anda dapat menggunakan kode Python berikut. Tidak seperti
pip freeze
ini, ini tidak akan mencetak peringatan dan kesalahan FIXME. Untuk pip <10.0.1Untuk pip> = 10.0.1
sumber
import pip
pip.install('packagename')
?Untuk meningkatkan semua paket lokal; Anda bisa menggunakannya
pip-review
:pip-review
adalah garpupip-tools
. Lihatpip-tools
masalah yang disebutkan oleh @knedlsepp .pip-review
paket bekerja tetapipip-tools
paket tidak lagi berfungsi.pip-review
bekerja pada Windows sejak versi 0.5 .sumber
pip-review --local --auto
Bekerja di Windows. Seharusnya juga baik untuk orang lain. ($ adalah direktori apa pun yang Anda masuki, pada prompt perintah. mis. C: / Pengguna / Nama Pengguna>)
melakukan
buka file teks, ganti
==
dengan>=
, dan jalankanJika Anda memiliki masalah dengan paket tertentu yang menghentikan upgrade (kadang-kadang numpy), buka saja direktori ($), beri komentar pada namanya (tambahkan # sebelum) dan jalankan upgrade lagi. Anda nanti dapat menghapus komentar bagian itu kembali. Ini juga bagus untuk menyalin lingkungan global python.
Cara lain:
Saya juga suka metode pip-review:
Anda dapat memilih 'a' untuk meningkatkan semua paket; jika satu upgrade gagal, jalankan lagi dan berlanjut di yang berikutnya.
sumber
requirements.txt
's=={version}
. Misalnya:python-dateutil==2.4.2
untukpython-dateutil
untuk semua baris.$ pip freeze | cut -d '=' -f1> requirements.txt
untuk menghapus versipip3 install -r <(pip3 freeze) --upgrade
Efektif,<(pip3 freeze)
adalah pipa anonim, tetapi itu akan bertindak sebagai objek fileVersi Windows setelah konsultasi baik dokumentasi untuk
FOR
oleh Rob van der Woudesumber
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i
Lebih cepat karena hanya akan mencoba dan memperbarui paket "usang"for /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i
. Jika ini dijalankan dari file batch, pastikan untuk menggunakan%%i
bukan%i
. Juga perhatikan bahwa lebih bersih untuk memperbaruipip
sebelum menjalankan perintah ini menggunakanpython -m pip install --upgrade pip
.Gunakan pipupgrade !
pipupgrade membantu Anda meningkatkan sistem Anda, lokal atau paket dari
requirements.txt
file! Itu juga secara selektif meningkatkan paket yang tidak merusak perubahan. pipupgrade juga memastikan untuk meningkatkan paket yang ada dalam beberapa lingkungan Python. Kompatibel dengan Python2.7 +, Python3.4 + dan pip9 +, pip10 +, pip18 +, pip19 +.CATATAN: Saya penulis alat ini.
sumber
Checking...
selamanya ketika saya mencobanya.[0;93mChecking...[0m
ModuleNotFoundError: No module named 'ctypes.windll'
Anda hanya dapat mencetak paket yang sudah usang
sumber
pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
python -m pip list outdated
(meskipun tidak dalam format persyaratan).Menurut saya, opsi ini lebih mudah dan mudah dibaca:
Penjelasannya adalah bahwa
pip list --outdated
menampilkan daftar semua paket usang dalam format ini:Dalam perintah awk,
NR>2
melompati dua record pertama (baris) dan{print $1}
memilih kata pertama dari setiap baris (seperti yang disarankan oleh SergioAraujo, saya dihapustail -n +3
karenaawk
memang bisa menangani skipping record).sumber
awk 'NR>2 {print $1}'
membersihkan output untuk AndaOne-liner berikut mungkin membuktikan bantuan:
(pip> 20.0)
pip list --format freeze --outdated | sed 's/=.*//g' | xargs -n1 pip install -U
xargs -n1
terus berjalan jika terjadi kesalahan.Jika Anda membutuhkan lebih banyak kontrol "berbutir halus" atas apa yang dihilangkan dan apa yang menimbulkan kesalahan, Anda tidak boleh menambahkan
-n1
flag dan secara eksplisit mendefinisikan kesalahan yang harus diabaikan, dengan "memipis" baris berikut untuk setiap kesalahan yang terpisah:| sed 's/^<First characters of the error>.*//'
Berikut ini contoh kerjanya:
sumber
| sed 's/^<First characters of the error>.*//'
diperlukan. Terima kasih!pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
Solusi Lebih Kuat
Untuk pip3 gunakan ini:
Untuk pip, hapus saja 3s seperti itu:
Keanehan OSX
OSX, mulai Juli 2017, dikirimkan dengan versi sed yang sangat lama (belasan tahun). Untuk mendapatkan ekspresi reguler yang diperluas, gunakan -E bukannya -r dalam solusi di atas.
Memecahkan Masalah dengan Solusi Populer
Solusi ini dirancang dan diuji dengan baik 1 , sedangkan ada masalah bahkan dengan solusi yang paling populer.
Perintah di atas menggunakan sintaksis pip yang paling sederhana dan paling portabel dalam kombinasi dengan sed dan sh untuk mengatasi masalah ini sepenuhnya. Rincian operasi sed dapat diteliti dengan versi komentar 2 .
Detail
[1] Diuji dan secara teratur digunakan dalam cluster Linux 4.8.16-200.fc24.x86_64 dan diuji pada lima rasa Linux / Unix lainnya. Ini juga berjalan pada Cygwin64 yang diinstal pada Windows 10. Diperlukan pengujian pada iOS.
[2] Untuk melihat anatomi perintah dengan lebih jelas, ini sama dengan perintah pip3 di atas dengan komentar:
[3] Memutakhirkan komponen Python atau PIP yang juga digunakan dalam peningkatan komponen Python atau PIP dapat menjadi penyebab potensial kebuntuan atau paket kerusakan basis data.
sumber
sed
OS X adalah dengan menggunakangsed
(GNU sed) sebagai gantinya. Untuk mendapatkannya,brew install gnu-sed
Ini sepertinya lebih ringkas.
Penjelasan:
pip list --outdated
mendapat garis seperti iniDalam
cut -d ' ' -f1
,-d ' '
set "spasi" sebagai pembatas,-f1
berarti untuk mendapatkan kolom pertama.Jadi baris di atas menjadi:
kemudian meneruskannya ke
xargs
untuk menjalankan perintahpip install -U
,, dengan setiap baris sebagai argumen tambahan-n1
membatasi jumlah argumen yang diteruskan ke setiap perintahpip install -U
menjadi 1sumber
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.
Saya memiliki masalah yang sama dengan peningkatan. Masalahnya, saya tidak pernah memperbarui semua paket. Saya hanya memutakhirkan apa yang saya butuhkan, karena proyek mungkin rusak.
Karena tidak ada cara mudah untuk memutakhirkan paket dengan paket, dan memperbarui file requirement.txt, saya menulis pembaruan pip ini yang juga memperbarui versi dalam
requirements.txt
file Anda untuk paket yang dipilih (atau semua paket).Instalasi
Pemakaian
Aktifkan virtualenv Anda (penting, karena itu juga akan menginstal versi baru dari paket yang ditingkatkan dalam virtualenv saat ini).
cd
ke direktori proyek Anda, lalu jalankan:Penggunaan tingkat lanjut
Jika persyaratan ditempatkan di lokasi yang tidak standar, kirimkan sebagai argumen:
Jika Anda sudah tahu paket apa yang ingin Anda tingkatkan, cukup kirimkan sebagai argumen:
Jika Anda perlu meningkatkan ke versi pra-rilis / pasca-rilis, tambahkan
--prerelease
argumen ke perintah Anda.Pengungkapan penuh: Saya menulis paket ini.
sumber
virtualenv
tidak diaktifkanpip-upgrade --skip-virtualenv-check
Dari https://github.com/cakebread/yolk :
namun Anda harus mendapatkan kuning telur terlebih dahulu:
sumber
Jawaban @ Ramana versi satu-baris .
`
sumber
sudo pip install
, gunakan env virtual , sebagai gantinya.saat menggunakan virtualenv dan jika Anda hanya ingin memutakhirkan paket yang ditambahkan ke virtualenv Anda, Anda mungkin ingin melakukan:
sumber
Solusi paling sederhana dan tercepat yang saya temukan dalam diskusi masalah pip adalah:
Sumber: https://github.com/pypa/pip/issues/3819
sumber
Solusi Windows Powershell
sumber
pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}
?pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}
akan lebih tepat.gunakan paket pembaruan awk:
pip install -U $(pip freeze | awk -F'[=]' '{print $1}')
pembaruan windows powershell
foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}
sumber
Anda dapat mencoba ini:
sumber
Kuning telur yang agak menakjubkan membuat ini mudah.
Untuk info lebih lanjut tentang kuning telur: https://pypi.python.org/pypi/yolk/0.4.3
Ini dapat melakukan banyak hal yang mungkin berguna bagi Anda.
sumber
yolk
menjadiyolk3k
, jawaban asli Anda pasti memiliki masalah dengan python3.Jawaban @ Ramana bekerja paling baik untuk saya, dari yang ada di sini, tetapi saya harus menambahkan beberapa tangkapan:
The
site-packages
cek tidak termasuk paket pengembangan saya, karena mereka tidak terletak dalam sistem direktori situs-paket. Try-kecuali hanya melompati paket yang telah dihapus dari PyPI.@endolith: Saya juga berharap mudah
pip.install(dist.key, upgrade=True)
, tetapi sepertinya pip tidak dimaksudkan untuk digunakan oleh apa pun kecuali baris perintah (dokumen tidak menyebutkan API internal, dan pengembang pip tidak menggunakan docstrings).sumber
pip
tampaknya memasukkan paket/usr/local/lib/python2.7/dist-packages
atau sejenisnya. Anda bisa menggunakan '/ usr / local / lib /' daripada 'paket situs' dalamif
pernyataan dalam kasus ini.Melakukan
pip_upgrade_outdated
pekerjaan. Menurut dokumennya :Langkah 1:
Langkah 2:
sumber
Dikirim melalui permintaan-tarik ke rakyat pipa ; Sementara itu gunakan solusi pustaka pip ini yang saya tulis:
sumber
Ini sepertinya bekerja untuk saya ...
Saya menggunakan
printf
spasi setelahnya untuk memisahkan nama paket dengan benar.sumber
Ini adalah solusi PowerShell untuk Python 3:
Dan untuk Python 2:
Ini meningkatkan paket satu per satu. Jadi a
setelah itu harus memastikan tidak ada dependensi yang rusak.
sumber
Bagaimana tentang:
sumber
Terpendek dan termudah di Windows.
sumber
Skrip saya:
sumber
Bukankah ini lebih efektif?
pip list -o
daftar paket usang;grep -v -i warning
pertandingan terbalik aktifwarning
untuk menghindari kesalahan saat memperbaruicut -f1 -d1' '
mengembalikan kata pertama - nama paket yang sudah ketinggalan zaman;tr "\n|\r" " "
mengubah hasil multilinecut
menjadi satu baris, daftar yang dipisahkan oleh ruang;awk '{if(NR>=3)print}'
melompati garis tajukcut -d' ' -f1
mengambil kolom pertamaxargs -n1 pip install -U
mengambil 1 argumen dari pipa sebelah kiri, dan meneruskannya ke perintah untuk memutakhirkan daftar paket.sumber
kerberos iwlib PyYAML Could pygpgme Could Could Could ...
Catat semua "Bisa". Mereka berasal dari outputpip list -o
"Tidak dapat menemukan unduhan yang memenuhi persyaratan <paket"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" " ")
. Kalau tidak, Anda bisa dengan mudah melewatkan satu baris yang tidak Anda inginkan dan mendapatkan hasil yang disebutkan DrStrangeprk.xargs
sebagai gantinya.pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U
The-r
bendera memastikan bahwapip install -U
tidak akan berjalan jika tidak ada paket usang. The-p
bendera meminta pengguna untuk mengkonfirmasi sebelum mengeksekusi perintah apapun. Anda dapat menambahkan-n1
bendera untuk meminta Anda sebelum menginstal setiap paket secara terpisah.satu baris di PowerShell 5.1 dengan hak adm, python 3.6.5 dan pip ver 10.0.1:
itu berfungsi dengan lancar jika tidak ada paket rusak atau roda khusus dalam daftar ...
sumber