Bagaimana cara mendeteksi dan menghapus paket Python yang diinstal melalui pip?

73

Saya tidak sengaja menginstal paket Python ke sistem saya menggunakan pipbukan apt-get. Saya melakukan ini dengan dua cara:

  • menggunakan versi yang lebih lama dari virtualenv, saya lupa untuk menambahkan --no-site-packagesketika membuat virtualenv - setelah itu ketika saya menelepon pip install, paket-paket Python di mana diinstal ke sistem daripada virtualenv
  • dalam virtualenv pengaturan yang benar, saya mengetik sudo pip install somepackage- sudo diinstal ke sistem daripada virtualenv

Saya kebetulan melihat ini karena saya mengetik di pip freezeluar virtualenv, dan melihat beberapa paket Python terdaftar yang seharusnya tidak ada di sana. Jadi sekarang pertanyaan saya adalah:

  • bagaimana cara mengidentifikasi semua paket Python yang telah keliru diinstal pada sistem (yaitu, paket Python yang muncul dalam pip freezedaftar, tetapi tidak diinstal dengan apt-get)?
  • bagaimana cara menghapusnya?
david.libremone
sumber

Jawaban:

56

Ubuntu Oneiric (dan saya mengharapkan versi yang lebih baru juga) menginstal paket pip /usr/local/lib/python2.7/dist-packages, dan aptpaket ke /usr/lib/python2.7/dist-packages. Jadi cukup periksa direktori sebelumnya dan sudo pip uninstallsetiap paket yang Anda temukan di sana.

Capi Etheriel
sumber
12
Saya menjadi brutal dan dikeluarkan sudo rm -r /usr/local/lib/python2.7. Sejauh ini bagus.
Apteryx
@Apteryx, saya melakukan hal yang sama /usr/local/lib/python3.5, dan setelah beberapa saat upgrade update-notifier-commonpaket gagal karena sixpaket Python 3 hilang . Saya akhirnya menginstal sixdengan sudo -H pip3 install six.
Alexey
2
@Apteryx, sial, kawan! Saya melakukan hal yang sama dan sekarang seluruh sistem saya kacau! karena hampir semua yang ada di ubuntu bergantung pada python!
yukashima huksay
Saya telah memperhatikan bahwa saya sekarang memiliki banyak executable yang rusak di /usr/local/bin/(beberapa saat yang lalu saya baru saja dihapus /usr/local/lib/python3.5dan beralih ke conda ).
Alexey
22

Pip saat ini mengabaikan perintah untuk menghapus instalan yang mencoba untuk menghapus sesuatu yang dimiliki oleh OS. Itu tidak kesalahan, seperti halnya dengan paket yang hilang. Jadi, sekarang Anda dapat menghapus instalasi dengan proses berikut:

pip freeze > dump.txt

Edit file yang dibuang untuk menghapus -ebaris "instal yang dapat diedit", semuanya setelah ==tanda ( %s;==.*;;gdalam vim), tukar baris baru dengan spasi ( %s;\n; ;gdalam vim). Kemudian Anda dapat menghapus semua paket yang tidak dimiliki dengan

cat dump.txt | xargs sudo pip uninstall -y

Saya harus melakukan prosedur ini dua kali, karena beberapa paket juga diinstal ~/.local/lib.

Henry Schreiner
sumber
1
Ini harus menjadi jawaban yang diterima untuk saya
Nam G VU
3
Jika ada yang menginginkan one-liner tanpa sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
sinar
4
Cermat! Ini tergantung pada apakah OS Anda mengirimkan versi khusus pip. Di archlinux pipdengan gembira mencopot pemasangan paket sistem. Di sisi lain, pippada debian jessie mengeluh dan kesalahan:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas G.
1
apakah kamu membutuhkan sudo? - ini pastinya jawaban yang diterima
Jonathan
6

AFAIK sudo pip installakan diinstal /usr/local/lib/pythonVERSION/dist-packages. Anda perlu menjalankan sudo pip uninstalluntuk menghapus instalasi paket sistem yang luas. Tampaknya pip freezemencari metadata paket dan akan mendaftar apa pun yang diinstal yaitu dari pip dan apt-get di luar virtualenvs. Ada -lopsi di dalam lingkungan virtual untuk mendaftar paket-paket yang hanya berlaku untuk lingkungan virtual itu tetapi tampaknya juga merupakan kasus default di dalam lingkungan virtual. Saya pikir Anda bisa menghapus paket-paket terkait /usr/local/lib/pythonVERSION/dist-packagesjuga tetapi metode yang tidak terlalu nyaman kurasa.

sagarchalise
sumber
5

Untuk menghapus paket yang diinstal melalui pip, cukup tekan Ctrl+ Alt+ Tdi keyboard Anda untuk membuka Terminal. Ketika terbuka, jalankan perintah di bawah ini.

pip uninstall < package-name >

Untuk mencari paket

pip search <package you want to search for>

Untuk menentukan paket Python mana yang diinstal oleh pip, dengan freezeperintah, yang akan memberi Anda daftar paket yang diinstal dan versinya. Saya akan menyarankan menghapus semua instance, dan menginstal ulang menggunakan sudo apt-getperintah

sudo apt-get install python3
Mitch
sumber
bagaimana cara menentukan paket Python mana yang diinstal oleh pip, dan mana oleh apt-get? bisakah saya diam pip uninstalljika saya menggunakannya sudo pip install?
david.libremone
@ d3vid pip freezehanya menunjukkan paket-paket yang diinstal (AFAICS).
Oli
1
@oli pip freeze, paling tidak tepatnya, juga mencantumkan paket yang diinstal oleh apt, seperti dijelaskan oleh jawaban lain di sini.
nealmcb
0

Saya perlu membersihkan ruang disk dari paket Python dengan aman. Meskipun ini adalah pembersihan lengkap dari paket, saya perlu memindahkan versi Python juga jadi saya tidak perlu paket lama. Saya menggunakan yang berikut ini untuk mendapatkan semua nama paket saya, lewati 2 baris pertama dan ambil kolom pertama, dan hapus instalasi tanpa interaksi pengguna:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}
m1st0
sumber
-2

Ini ada hubungannya dengan Homebrew. Saya tidak punya masalah dengan pyodbc di Mac Air sampai saya menginstal Homebrew dan menggunakannya untuk beberapa hal. Saya menemukan utas ini di github yang berakhir dengan solusi yang bekerja untuk saya.

"Jika Anda memiliki Homebrew, cukup instal header ODBC:

$ brew install unixodbc

dan jalankan "pip install pyodbc" lagi. "

Ini 100% menyelesaikan masalah bagi saya dan hanya butuh beberapa saat. Cobalah.

Pogo
sumber
mungkin Anda perlu memposting ini di Ask Different? apple.stackexchange.com
david.libremone