Pertanyaan Upgrade semua paket dengan pip


Apakah mungkin untuk meng-upgrade semua paket Python sekaligus pip?

Perhatikan bahwa ada permintaan fitur untuk ini di pelacak isu resmi.


1418
2018-04-27 09:23


asal


Jawaban:


Belum ada bendera yang terpasang, tetapi Anda dapat menggunakannya

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

Catatan: ada variasi potensial yang tak terbatas untuk ini. Saya mencoba untuk menjaga jawaban ini singkat dan sederhana, tetapi tolong berikan variasi pada komentar!

Pengeditan yang relevan:

  • Ditambahkan a grep untuk melewati definisi paket "-e", seperti yang disarankan oleh @jawache (Ya, Anda dapat mengganti grep+cut dengan sed atau awk atau perl atau...).
  • Versi terbaru dari pip memungkinkan Anda untuk membuat daftar paket yang sudah kedaluwarsa:

    pip list --outdated --format=freeze
    
  • Ditambahkan -n1 untuk xargs, mencegah menghentikan semuanya jika memperbarui satu paket gagal (terima kasih @andsens)


1660
2017-08-10 19:56



Anda dapat menggunakan kode Python berikut. Tidak seperti pip freeze, ini tidak akan mencetak peringatan dan kesalahan FIXME.

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)

514
2018-04-30 03:31



Untuk meningkatkan semua paket lokal; Anda bisa menggunakan pip-review:

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

pip-review adalah garpu dari pip-tools. Lihat pip-tools isu disebutkan oleh @knedlsepp. pip-review paket berfungsi tetapi pip-tools paket tidak lagi berfungsi.

pip-review berfungsi di Windows sejak versi 0,5.


501
2018-04-29 00:34



Bekerja pada Windows. Seharusnya baik untuk orang lain juga. ($ adalah direktori apa pun yang Anda gunakan, pada command prompt. misalnya C: / Users / Username>)

melakukan

$ pip freeze > requirements.txt

buka file teks, ganti == dengan> =

lalu lakukan

$ pip install -r requirements.txt --upgrade

Jika Anda memiliki masalah dengan paket tertentu yang menghambat peningkatan (kadang-kadang numpy), cukup buka direktori ($), beri komentar nama (tambahkan # sebelum) dan jalankan upgrade lagi. Anda kemudian dapat menghapus tanda komentar pada bagian itu. Ini juga bagus untuk menyalin lingkungan global python.

Saya juga menyukai metode pip-review:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

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

Anda dapat memilih 'a' untuk meningkatkan semua paket; jika satu upgrade gagal, jalankan lagi dan berlanjut pada yang berikutnya.


182
2017-11-12 09:20



Versi Windows setelah konsultasi sangat baik dokumentasi untuk FOR oleh Rob van der Woude

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

87
2018-02-25 18:04



Anda tinggal mencetak paket yang sudah kadaluarsa

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

70
2018-06-10 12:50



Satu baris berikut mungkin terbukti membantu:

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

xargs -n1 terus berjalan jika kesalahan terjadi.

Jika Anda membutuhkan lebih banyak kontrol "fine grained" atas apa yang dihilangkan dan apa yang memunculkan kesalahan, Anda seharusnya tidak menambahkan -n1 tandai dan tentukan secara eksplisit kesalahan untuk diabaikan, dengan "pemipaan" baris berikut untuk setiap kesalahan yang terpisah:

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

Berikut ini contoh kerja:

pip list --format legacy --outdated | sed 's/(.*//g' | sed 's/^<First characters of the first error>.*//' | sed 's/^<First characters of the second error>.*//' | xargs pip install -U

57
2018-03-07 20:25



Opsi ini menurut saya lebih lugas dan mudah dibaca:

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

(awk '{ print $1}' memilih kata pertama dari garis (dipisahkan oleh spasi))

Dan versi ini memungkinkan untuk penekanan pesan peringatan dari pip list --outdated:

pip install -U `pip list --outdated | awk '!/Could not|ignored/ { print $1}'`

(awk '!/<pattern>/' menghapus garis yang mengandung pola yang diberikan. Dalam kasus saya, pesan peringatan termasuk "Tidak bisa" dan "diabaikan" masing-masing)

Ini juga bisa digunakan untuk mengatasi default yang datang columns format:

pip install -U `pip list --format=columns --outdated | awk '!/Package|---/{ print $1}'`

42
2017-11-21 23:15