Solusi Lebih Kuat
Untuk pip3 gunakan ini:
pip3 freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip3 install -U \1/p' |sh
Untuk pip, hapus saja 3s seperti itu:
pip freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip install -U \1/p' |sh
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.
- Masalah portabilitas karena perubahan fitur-fitur baris perintah pip
- Menabrak xargs karena pip umum atau proses anak pip3 gagal
- Penebangan yang ramai dari output xargs mentah
- Mengandalkan jembatan Python-ke-OS sementara berpotensi meningkatkannya 3
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:
# 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] Memutakhirkan komponen Python atau PIP yang juga digunakan dalam peningkatan komponen Python atau PIP dapat menjadi penyebab potensial kebuntuan atau paket kerusakan basis data.
pip freeze
(sukabundle install
ataunpm shrinkwrap
). Terbaik untuk menyimpan salinan itu sebelum bermain-main.