uninstall python setup.py

787

Saya telah menginstal paket python dengan python setup.py install.

Bagaimana cara mencopotnya?

flybywire
sumber
52
Jawaban yang diterima sudah usang. Gunakan pip uninstall <your_package>. Lihat stackoverflow.com/questions/1231688/… .
Joachim W
21
uninstall pip bukan lagi jawaban yang valid. Ini buktinya. [sri @ localhost python] $ pip uninstall foo DEPRECATION: Menghapus instalan proyek yang diinstal distutils (foo) telah usang dan akan dihapus dalam versi masa depan. Ini karena fakta bahwa mencopot proyek distutils hanya akan mencopot sebagian proyek.
shrewmouse
@shrewmouse yang tidak muncul lagi.
JC Rocamonde
@JCRocamonde Dengan paket yang saya buat, versi terbaru dari pip menunjukkan 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.ini masih menjadi masalah.
Josh
@Josh di bagian atas file setup.py Anda lakukan "dari setuptools import setup" daripada "from distutils.core import setup".
bigjake

Jawaban:

977

Catatan: Hindari python setup.py installpenggunaanpip install .

Anda perlu menghapus semua file secara manual, dan juga membatalkan hal-hal lain yang dilakukan instalasi secara manual.

Jika Anda tidak tahu daftar semua file, Anda dapat menginstalnya kembali dengan --recordopsi, dan lihat daftar yang dihasilkan ini.

Untuk merekam daftar file yang diinstal, Anda dapat menggunakan:

python setup.py install --record files.txt

Setelah Anda ingin menghapus instalan Anda dapat menggunakan xargs untuk melakukan penghapusan:

xargs rm -rf < files.txt

Atau jika Anda menjalankan Windows, gunakan Powershell:

Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}

Kemudian hapus juga direktori yang berisi, mis . /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/Pada macOS. Tidak ada file, tetapi Python masih akan mengimpor modul kosong:

>>> import my_module
>>> my_module.__file__
None

Setelah dihapus, Python menunjukkan:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'
Martin v. Löwis
sumber
6
Jika ini tidak berhasil, tambahkan sudo sebagai berikut:cat files.txt | xargs sudo rm -rf
saroele
21
Ini akan mengacaukan file dengan spasi. Lihat jawaban saya di bawah ini: stackoverflow.com/a/25209129/14456
Ian Kelling
1
Bagaimana saya bisa menginstal ulang paket saya memiliki kode sumber menggunakan setup.py darinya?
ア レ ッ ク ス
5
Ini juga meninggalkan direktori kosong di tempatnya.
Dilawar
3
Hai, saya mencoba saran Anda, untuk beberapa file ketika saya mencoba cat files.txt | xargs rm -rf dikatakan izin ditolak, bahkan dalam mode sudo, misalnya untuk / usr / local / bin / pydoc atau / usr / local / bin / idle Ada ide mengapa?
212

Bagi saya, sebagian besar berfungsi:

sudah menginstal pip, mis .:

$ easy_install pip

Periksa, bagaimana paket yang Anda instal dinamai dari sudut pandang pip:

$ pip freeze

Ini akan mencantumkan nama semua paket, yang telah Anda instal (dan yang terdeteksi oleh pip). Namanya bisa lama, lalu gunakan hanya nama paket yang ditampilkan di dan setelah #egg=. Anda juga dapat dalam sebagian besar kasus mengabaikan bagian versi (apa pun yang mengikuti ==atau -).

Kemudian hapus instalasi paket:

$ pip uninstall package.name.you.have.found

Jika meminta konfirmasi tentang menghapus paket, maka Anda beruntung dan itu akan dihapus.

pip harus mendeteksi semua paket, yang dipasang oleh pip. Ini juga akan mendeteksi sebagian besar paket yang diinstal melalui easy_install atau setup.py, tetapi ini mungkin dalam beberapa kasus jarang gagal.

Berikut ini adalah contoh nyata dari tes lokal saya dengan paket bernama ttr.rdstmcpada MS Windows

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev

$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
  c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
  Successfully uninstalled ttr.rdstmc

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

Edit 2015-05-20

Semua yang tertulis di atas masih berlaku, lagi pula, ada modifikasi kecil yang tersedia sekarang.

Instal pip dalam python 2.7.9 dan python 3.4

Versi python terbaru datang dengan paket yang ensurepipmemungkinkan untuk menginstal pip bahkan ketika sedang offline:

$ python -m ensurepip --upgrade

Pada beberapa sistem (seperti Debian Jessie) ini tidak tersedia (untuk mencegah pemecahan instalasi sistem python).

Menggunakan grepataufind

Contoh di atas menganggap, Anda telah grepmenginstal. Saya telah (pada saat itu saya punya MS Windows di mesin saya) menginstal seperangkat utilitas linux (termasuk grep). Atau, gunakan MS Windows asli findatau abaikan saja penyaringan itu dan temukan namanya dalam daftar paket python yang terdeteksi lebih lama.

Jan Vlcinsky
sumber
1
alat / versi pengemasan mana yang Anda gunakan agar ini berfungsi? ( distutils,, distributedll ...)
Ciro Santilli 郝海东 冠状 病 六四 事件 事件
1
Saya menggunakan setuptools. Anda dapat memeriksa bitbucket.org/vlcinsky/ttr.aws.utils.s3 (yang tidak sempurna). Bagaimanapun, saya cukup tidak senang dengan penggunaan paket namespace, kadang-kadang impor rusak tanpa alasan yang terlihat. Tapi ini cerita lain.
Jan Vlcinsky
1
mengoreksi diri sendiri. Meskipun saya impor setuptools, sebenarnya saya gunakan distribute. Pelajaran lain: ketika menginstal paket saya sendiri dari pypi dan berencana untuk mengembangkan yang lain secara lokal dengan berbagi namespace yang sama, jangan gunakan $ pip install <the package> , gunakan $ easy_install <the package>, jika tidak Anda akan mengalami konflik saat mengimpor paket pengembangan Anda.
Jan Vlcinsky
1
Untuk membantu orang lain: karena saya bukan root, saya menginstal semuanya di rumah saya. Inilah yang saya lakukan easy_install --user --prefix=$HOME pip. Lalu aku menambahkan berikut di PATH saya: ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/bindan ln -s /home/tflutre/.local/bin/pip2 ~/bin.
tflutre
3
Jawaban ini harus diterima, karena jauh lebih mudah dan pip biasanya disertai dengan Python. Mudah digunakan pada command prompt / terminal - pip uninstall moduleatau python -m pip uninstall moduleseharusnya berfungsi. Juga harus cross-platform, seperti bagian dari Python.
Edward
81

Jawaban # 1 memiliki masalah:

  • Tidak akan bekerja pada mac.
  • Jika file diinstal yang mencakup spasi atau karakter khusus lainnya, xargsperintah akan gagal, dan menghapus file / direktori yang cocok dengan kata-kata individual.
  • yang -rdi rm -rftidak perlu dan paling buruk bisa menghapus hal-hal yang tidak ingin.

Sebaliknya, untuk unix-like:

sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

Dan untuk windows:

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

Ada juga masalah yang belum terpecahkan dengan menghapus instalan setup.pyyang tidak akan mengganggu Anda dalam kasus tertentu. Untuk jawaban yang lebih lengkap, lihat halaman wiki ini:

https://ofswiki.org/wiki/Uninstalling_setup.py_install

Ian Kelling
sumber
3
Mengapa Anda tidak meninggalkan saran di bawah yang terpilih? Perhatikan bahwa, "masalah serius" ini adalah tentang kasus sudut.
lpapp
17
Saya meninggalkan komentar di bawah yang terpilih. Komentar saya dimakamkan di bawah tautan "muat lebih banyak komentar" yang sangat sedikit orang klik. Saya juga membuat jawaban saya sendiri karena saya punya banyak hal untuk dikatakan, yaitu. tautan dalam jawaban saya. Juga, kasus sudut tidak akan menjadi istilah pertama yang muncul di benak saya ketika file memiliki ruang di dalamnya.
Ian Kelling
Untuk apa nilainya, saya pikir ini akan gagal pada nama file yang mengandung baris baru :) Apakah pengelola paket jahat, saya harap saya tidak pernah mengetahuinya.
Jack O'Connor
2
Pada OS X Mavericks, setidaknya, xargs tidak memiliki opsi -d. Mengapa? Karena Apple mencintaimu. Pokoknya ini memiliki efek yang sama seperti di atas, dan aman dengan ruang dan semacamnya. Namun spesifik Bash. Setelah menjalankan instal dengan --record to files.txt:OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Joseph Sikorski
2
@IanKelling Variabel penyisipan di dalam printfstring format akan gagal jika string mengandung misalnya eg %atau \karakter. Selalu berikan string format: printf '%s\0' "$line"(juga hindari gema). Meskipun Anda selanjutnya dapat menghindari loop dengan hanya menggunakantr '\n' '\0' < files.txt | xargs -0 rm -f
geirha
39

Pertama, rekam file yang telah Anda instal. Anda dapat mengulangi perintah ini, bahkan jika sebelumnya Anda telah menjalankan setup.py install:

python setup.py install --record files.txt

Saat Anda ingin menghapus instalan, Anda dapat:

sudo rm $(cat files.txt)

Ini berfungsi karena perintah rm mengambil daftar file yang dipisahkan spasi-putih untuk dihapus dan catatan instalasi Anda hanyalah daftar seperti itu.

nathan
sumber
Apakah ada cara untuk memeriksa tidak hanya apakah program saya yang menginstalnya tetapi juga jika sejak saat itu, tidak ada aplikasi lain yang menggunakan sumber daya ini? Sebagai contoh, saya menginstal alat, untuk melakukannya, saya harus menginstal beberapa perpustakaan, mungkin beberapa dari mereka sudah diinstal (yang berarti saya tidak dapat menghapus dalam proses uninstall) tetapi juga saya tidak dapat menghapus apa pun yang aplikasi lain tidak diinstal karena perpustakaan saya telah menginstal pertama ..
Gabrielle
19

Sekarang python memberi Anda pilihan untuk menginstal pipselama instalasi (saya di Windows, dan setidaknya python melakukannya untuk Windows!). Mengingat Anda telah memilih untuk menginstal pipselama instalasi python (Anda sebenarnya tidak harus memilih karena itu default), pipsudah diinstal untuk Anda. Kemudian, ketikkan pipcommand prompt, Anda akan melihat bantuan muncul. Anda dapat menemukan instruksi penggunaan yang diperlukan di sana. Misalnya pip listmenunjukkan kepada Anda daftar paket yang diinstal. Kamu bisa menggunakan

pip uninstall package_name

untuk menghapus paket yang tidak Anda inginkan lagi. Baca lebih lanjut di sini (dokumentasi pip) .

Sнаđошƒаӽ
sumber
8

Cara malas: cukup hapus instalasi dari menu instalasi Windows (jika Anda menggunakan Windows), atau dari perintah rpm, asalkan Anda menginstalnya kembali setelah membuat paket distribusi.

Sebagai contoh,

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

("foo" menjadi contoh saja).

RedGlyph
sumber
4
Saya tidak tahu apakah saya menyukainya, tetapi Anda mendapatkan poin untuk pemikiran ortogal. :)
Lennart Regebro
Sejujurnya, saya tidak yakin karena itu "cara malas" ;-) Tapi saya pikir saya akan menyebutkan itu mungkin untuk membuat lebih banyak "standar" installer. Anehnya, setup.py tidak menyediakan cara bersih untuk menghapus paket.
RedGlyph
1
Pencopotan pemasangan memerlukan registrasi terpusat dari paket yang diinstal dan file-file itu, dan tidak ada satu pun. Diskusi sedang berlangsung tentang cara meningkatkan cerita ini dan mungkin diselesaikan dengan Python 2.7 / 3.2 atau 2.8 / 3.3 atau lebih.
Lennart Regebro
1
@Lennart: tidak akan ada Python 2.8 setidaknya itulah pernyataan resmi saat ini
Piotr Owsiak
2
@PiotrOwsiak: Ya, tapi itu bukan pernyataan saat itu. 2,8 masih kemungkinan pada waktu itu dan tetap demikian sampai PEP 404 disetujui, akhir tahun lalu, saya pikir.
Lennart Regebro
6

Buka direktori paket python Anda dan hapus file .egg Anda, misalnya: Dalam python 2.5 (ubuntu): /usr/lib/python2.5/site-packages/

Dalam python 2.6 (ubuntu): /usr/local/lib/python2.6/dist-packages/

pengguna149513
sumber
1
Bekerja, kecuali jika menginstal file yang diinstal di luar paket, yang beberapa lakukan, seperti setuptools yang menginstal dan perintah easy_install.
Lennart Regebro
3
Biasanya, jika paket diinstal menggunakan python setup.py seperti yang ditentukan oleh OP, tidak akan ada telur. OTOH, jika ada satu karena easy_install digunakan, cara terdokumentasi untuk menghapus paket adalah dengan menggunakan easy_install -m sebelum menghapus file telur; jika tidak, cangkang telur mungkin tertinggal dalam file instal-instal yang mudah.
Ned Deily
5

Tidak persis menjawab pertanyaan, tetapi sesuatu yang membantu saya setiap hari:

Instal paket Anda dengan

pip install .

Ini memasukkan paket $HOME/.local. Copot pemasangan dengan

pip uninstall <package_name>
Nico Schlömer
sumber
1
pip unistall .tidak bekerja untuk saya, tetapi pip uninstall <package_name>berhasil, terima kasih!
Danijel
4

Mungkin Anda bisa melakukan ini sebagai alternatif: -

1) Dapatkan versi python -

[linux machine]# python
Python 2.4.3 (#1, Jun 18 2012, 14:38:55) 

-> Perintah di atas memberi Anda Versi python saat ini yaitu 2.4.3

2) Dapatkan direktori instalasi python -

[linux machine]# whereis python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python2.5 /usr/include/python2.4 /usr/share/man/man1/python.1.gz

-> Dari perintah di atas Anda bisa mendapatkan direktori instalasi yang - /usr/lib/python2.4/site-packages

3) Dari sini Anda dapat menghapus paket dan file telur python

[linux machine]# cd /usr/lib/python2.4/site-packages
[linux machine]# rm -rf paramiko-1.12.0-py2.4.egg paramiko-1.7.7.1-py2.4.egg paramiko-1.9.0-py2.4.egg

Ini bekerja untuk saya .. Dan saya dapat menghapus paket yang mengganggu saya :)

COD3R
sumber
3

Saya pikir Anda dapat membuka setup.py, cari nama paket, dan kemudian minta pip untuk menghapusnya.

Dengan asumsi nama tersedia dalam variabel 'METADATA':

pip uninstall $(python -c "from setup import METADATA; print METADATA['name']")
ThorSummoner
sumber
1

Memperluas apa yang dikatakan Martin, merekam output instal dan skrip bash kecil cukup berhasil. Inilah yang saya lakukan ...

for i in $(less install.record);
sudo rm $i;
done;

Dan presto. Tidak terinstal.

75%
sumber
2
Jauh lebih mudah untuk menulis ini sebagai sudo xargs rm -v < install.record.
poolie
1

Jika Anda masih memiliki file yang seharusnya dihapus setelah menginstal ulang paket, pastikan folder buildtersebut juga dihapus. Karenanya, anggap itu pkgadalah paket yang ingin Anda hapus:

rm -r $(python3 -c "import pkg; print(pkg.__path__[0] + '*' )") 
rm -rf build

Usahakan berolahraga untuk python3 dan hapus paket dan file * .egg-info-nya

Ulises Rosas-Puchuri
sumber
1

Di {virtualenv}/lib/python2.7/site-packages/(jika tidak menggunakan virtualenv maka {system_dir}/lib/python2.7/dist-packages/)

  • Hapus file telur (mis. distribute-0.6.34-py2.7.egg)
  • Jika ada dari file easy-install.pth, hapus baris yang sesuai (itu harus path ke direktori sumber atau file telur).
Bhindi
sumber
0

Saya telah menjalankan "python setup.py install" di beberapa titik di masa lalu secara tidak sengaja di lingkungan global saya, dan mengalami banyak kesulitan untuk menghapus instalan. Solusi ini tidak membantu. "pip uninstall" tidak berfungsi dengan "Tidak dapat menghapus 'splunk-appinspect'. Tidak ada file yang ditemukan untuk dihapus." "sudo pip uninstall" tidak berfungsi "Tidak dapat menghapus persyaratan splunk-appinspect, tidak diinstal". Saya mencoba mencopot pemasangan pip, menghapus cache pip, mencari paket perangkat keras saya, dll ...

"pip show" akhirnya membawaku ke solusi, "Location:" menunjuk ke sebuah direktori, dan mengganti nama direktori itu menyebabkan paket tersebut dihapus dari daftar pip. Saya mengganti nama direktori kembali, dan itu tidak muncul kembali dalam daftar pip, dan sekarang saya dapat menginstal ulang paket saya dalam virtualenv.

mmacvicar
sumber
0

Saya telah menjalankan python setup.py installsekali di PyCharm saya, itu menginstal semua paket ke lingkungan basis conda saya. Nanti ketika saya ingin menghapus semua paket ini, pip uninstalltidak berfungsi. Saya harus menghapusnya dari /anaconda3/lib/python3.7/site-packages secara manual :(

Jadi saya tidak melihat alasan mengapa mereka menggunakan file setup.py alih-alih menulis file requirement.txt. File persyaratan dapat digunakan untuk menginstal paket dalam lingkungan virtual dan tidak akan mengacaukan paket sistem python.

Yossarian42
sumber
-1

Mungkin lebih baik untuk menghapus file terkait dengan menggunakan bash untuk membaca perintah, seperti berikut ini:

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"
Mark Peng
sumber
Ini adalah salinan dari jawaban sebelumnya yang sudah ada.
Karl Richter