Bagaimana Anda menghapus paket python yang diinstal menggunakan distutils?

92

Bisakah Anda menghapus direktori dari instalasi python Anda, atau adakah file yang tersisa yang harus Anda hapus?

Hortitude
sumber

Jawaban:

45

Ini bervariasi berdasarkan opsi yang Anda berikan installdan konten file konfigurasi distutils pada sistem / dalam paket. Saya tidak percaya bahwa file apa pun diubah di luar direktori yang ditentukan dengan cara ini.

Khususnya, distutils tidak memiliki perintah uninstall saat ini.

Perlu juga dicatat bahwa menghapus paket / telur dapat menyebabkan masalah ketergantungan - utilitas seperti easy_installupaya untuk mengatasi masalah tersebut.

cdleary
sumber
4
Bisakah Anda memperbarui ini untuk langsung menjawab bagian file yang tersisa dari pertanyaan?
S. Lott
Saya pikir saya melakukannya - tidak ada file yang dibuat di luar direktori yang ditentukan oleh konfigurasi distutils dan flag install, jadi semua file yang "tertinggal" akan ada di direktori ini. Ini bervariasi dari paket ke paket.
cdleary
2
@cdleary: terima kasih, tetapi, saya berharap Anda hanya memperjelas dan memperkuat jawaban Anda, bukan menambahkan utas komentar panjang.
S. Lott
2
@ S. Lott: Maaf, tetapi saya tidak tahu bagian jawaban mana yang Anda ingin klarifikasi - dapatkah Anda lebih spesifik?
cdleary
1
msg139773 Tanggal: 2011-07-04 14:35 distutils2 / packaging sekarang menyediakan fungsi hapus dan perintah pysetup remove.
Edward
19

Tiga hal yang terinstal dan perlu Anda hapus adalah:

  1. Paket / modul
  2. Skrip
  3. File data

Sekarang di sistem linux saya, ini langsung:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr / share

Tetapi pada sistem windows mereka lebih cenderung sepenuhnya berada dalam direktori distribusi Python. Saya tidak tahu tentang OSX kecuali lebih suka mengikuti pola linux.

Ali Afshar
sumber
14

Peretasan berbasis cap waktu lainnya:

  1. Buat jangkar: touch /tmp/ts
  2. Instal ulang paket yang akan dihapus: python setup.py install --prefix=<PREFIX>
  3. Hapus file yang lebih baru dari file jangkar: find <PREFIX> -cnewer /tmp/ts | xargs rm -r
pepatah
sumber
1
-1. Saya tidak suka | xargs rm -r. Saya sarankan untuk memeriksa setiap file secara manual . Pada ext4 (dan sistem file lainnya), ini findakan mencantumkan semua folder juga. Jika awalan Anda dulu /usr, Anda akan menghapus/usr/* .
Mateen Ulhaq
8

Ya, aman untuk hanya menghapus apa pun yang distutils terinstal. Itu berlaku untuk folder yang diinstal atau file .egg. Secara alami, apa pun yang bergantung pada kode itu tidak akan berfungsi lagi.

Jika Anda ingin membuatnya berfungsi kembali, cukup instal ulang.

Ngomong-ngomong, jika Anda menggunakan distutils juga pertimbangkan untuk menggunakan fitur multi-versi. Ini memungkinkan Anda untuk menginstal beberapa versi dari paket tunggal apa pun. Itu berarti Anda tidak perlu menghapus versi lama dari sebuah paket jika Anda hanya ingin menginstal versi yang lebih baru.

Salim Fadhley
sumber
5

Di ubuntu 12.04, saya telah menemukan bahwa satu-satunya tempat yang perlu Anda lihat secara default ada di bawah

/usr/local/lib/python2.7/

Dan cukup hapus folder dan file terkait, jika ada!

Hydrox24
sumber
Kadang-kadang di / usr / lib / python <2.7 / 3.6>
Vineet
4

Jika ini untuk tujuan pengujian dan / atau pengembangan, setuptools memiliki perintah pengembangan yang diperbarui setiap kali Anda membuat perubahan (jadi Anda tidak perlu menghapus dan menginstal ulang setiap kali membuat perubahan). Dan Anda juga dapat menghapus paket menggunakan perintah ini.

Jika Anda menggunakan ini, apa pun yang Anda nyatakan sebagai skrip akan ditinggalkan sebagai file yang tersisa.

Jason Baker
sumber
4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

menghapus semua file dan meninggalkan direktori kosong.

Itu tidak ideal, itu harus cukup untuk menghindari konflik paket.

Dan kemudian Anda dapat menyelesaikan pekerjaan secara manual jika Anda ingin dengan membaca files.txt, atau lebih berani dan mengotomatiskan penghapusan direktori kosong juga.

Penolong yang aman adalah:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

Diuji dengan Python 2.7.6, Ubuntu 14.04.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
2

Saya baru saja menghapus paket python, dan meskipun saya tidak yakin saya melakukannya dengan sempurna, saya cukup yakin.

Saya mulai dengan mendapatkan daftar semua file yang terkait dengan python, diurutkan berdasarkan tanggal, dengan asumsi bahwa semua file dalam paket saya akan memiliki stempel waktu yang kurang lebih sama, dan tidak ada file lain yang memilikinya.

Untungnya, saya telah menginstal python di bawah /opt/Python-2.6.1; jika saya telah menggunakan Python yang disertakan dengan distro Linux saya, saya harus menjelajahi semuanya /usr, yang akan memakan waktu lama.

Kemudian saya hanya memeriksa daftar itu, dan mencatat dengan lega bahwa semua hal yang ingin saya nuklir terdiri dari satu direktori /opt/Python-2.6.1/lib/python2.6/site-packages/module-name/, dan satu file /opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info,.

Jadi saya baru saja menghapusnya.

Inilah cara saya mendapatkan daftar file yang diurutkan berdasarkan tanggal:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(Saya pikir itu pasti GNU "temukan", omong-omong; rasa yang Anda dapatkan di OS X tidak tahu tentang "-printf '% T @'")

Saya menggunakannya sepanjang waktu.

offby1
sumber
2

Untuk Windows 7,

Panel Kontrol -> Program -> Copot Pemasangan

, kemudian

pilih paket python untuk dihapus.

b_dev
sumber
@Mauricio Saya tidak melihat versi lama dalam daftar tetapi saya dapat melihat file telur di paket situs. Apakah ini masalah?
2

untuk Python di Windows:

python -m pip uninstall "package_keyword"
uninstall **** (y/n)?
pengguna8074545
sumber
Tidak berfungsi jika paket telah diinstal menggunakan distutils.
Kefeng91
1

Di Mac OSX, hapus 2 direktori ini secara manual di bawah pathToPython / site-packages / Anda akan berfungsi:

  • {nama paket}
  • {packageName} - {version} -info

misalnya, untuk menghapus pyasn1 , yang merupakan proyek terinstal distutils:

  • rm -rf lib / python2.7 / site-packages / pyasn1
  • rm -rf lib / python2.7 / site-packages / pyasn1-0.1.9-py2.7.egg-info

Untuk mengetahui di mana paket situs Anda:

python -m site
Lynne
sumber
1
Bekerja seperti yang diharapkan.
c1377554
-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

Lalu saya ketik:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

Selesai!

goodpen
sumber
1
Silakan coba jelaskan apa yang Anda lakukan dan mengapa alih-alih hanya menampilkan output konsol.
Headhunter Xamd