Cara menghapus paket yang diinstal dengan pip install --user

219

Ada --useropsi untuk pip yang dapat menginstal paket Python per pengguna:

pip install --user [python-package-name]

Saya menggunakan opsi ini untuk menginstal paket pada server yang saya tidak memiliki akses root. Yang saya butuhkan sekarang adalah menghapus paket yang diinstal pada pengguna saat ini. Saya mencoba menjalankan perintah ini:

pip uninstall --user [python-package-name]

Tapi saya mendapat:

no such option: --user

Bagaimana saya bisa menghapus paket yang saya instal pip install --user, selain menemukan dan menghapus paket secara manual?

Saya telah menemukan artikel ini

pip tidak dapat menghapus instalasi dari direktori paket-situs-pengguna per-pengguna

yang menjelaskan bahwa menghapus paket dari direktori pengguna tidak didukung. Menurut artikel jika itu diterapkan dengan benar maka dengan

pip uninstall [package-name]

paket yang diinstal juga akan dicari di direktori pengguna. Tapi masih ada masalah bagi saya. Bagaimana jika paket yang sama dipasang di seluruh sistem dan per-pengguna? Bagaimana jika seseorang perlu menargetkan direktori pengguna tertentu?

Serjik
sumber
1
Tidak, Anda harus menetapkan satu virtualenv per pengguna: grup dan memberikan izin sistem yang tepat ke folder yang berisi itu.
danius
3
Tidak ada cara untuk menginstal paket seluruh sistem untuk semua pengguna dan kemudian uninstall secara selektif untuk beberapa pengguna. Jika paket diinstal saat --useritu, uninstall tanpa --userakan melakukan apa yang Anda inginkan.
tripleee
@ tripleee: Saya tidak memiliki sistem izin yang luas dan tidak mau, saya hanya perlu menghapusnya per pengguna saat ini
Serjik
1
Cari tahu direktori mana yang Anda tidak memiliki izin untuk menghapus, dan perbaiki izinnya, atau pindahkan secara manual ke samping.
tripleee

Jawaban:

196

Setelah mengujinya menggunakan Python 3.5 dan pip 7.1.2 di Linux, situasinya tampak seperti ini:

  • pip install --user somepackagemenginstal ke $HOME/.local, dan menghapus itu berfungsi menggunakan pip uninstall somepackage.

  • Ini benar apakah somepackagedipasang di seluruh sistem atau tidak secara bersamaan.

  • Jika paket diinstal di kedua tempat, hanya paket lokal yang akan dihapus. Untuk menghapus instalasi paket menggunakan seluruh sistem pip, pertama uninstall secara lokal, kemudian jalankan perintah uninstall yang sama lagi, dengan roothak istimewa.

  • Selain direktori instalasi pengguna yang telah ditentukan, pip install --target somedir somepackageakan menginstal paket ke somedir. Tidak ada cara untuk menghapus instalasi paket dari tempat seperti itu menggunakan pip. (Tapi ada permintaan tarikan yang agak tua pada Github yang mengimplementasikannyapip uninstall --target .)

  • Karena satu-satunya tempat yang pipakan menghapus instalan adalah sistem-lokal dan pengguna-lokal yang telah ditentukan, Anda harus menjalankan pip uninstallsebagai masing-masing pengguna untuk menghapus dari direktori instalasi lokal pengguna tertentu.

Thomas Lotze
sumber
2
Apakah pernyataan ini akurat untuk menjalankan pip di dalam lingkungan virtual?
kbolino
dalam kasus saya mencopot pemasangan tidak berfungsi untuk paket pip 9.0.1 masih diinstal di HOME /./ local
Genom
2
Poin 2 sepertinya tidak benar pada sistem saya. Saya memiliki paket sistem yang jedidiinstal di /usr/lib64/python2.7/site-packages/. Ketika saya melakukannya, sebagai pengguna normal: pip install --user jedi dan kemudian pip uninstall jedi, pip mencoba untuk menghapus /usr/lib64/python2.7/site-packages/jedidan kemudian memulai Permission denied. Jadi, jika --usertidak ada untuk perintah uninstall, bagaimana cara saya kirim uninstall bukan untuk mencoba uninstall /usr/lib64/python2.7/site-packages/jeditapi ~/.local/lib64/python3.6/site-packages/jedi?
AstroFloyd
Persis sama di sini dengan @AstroFloyd
Nikana Reklawyks
28

contoh untuk menghapus paket 'oauth2client' pada MacOS:

pip uninstall oauth2client
Huy - Logarit
sumber
9

Berhati-hatilah, bagi mereka yang menggunakan pip install --user some_pkg di dalam lingkungan virtual .

$ path/to/python -m venv ~/my_py_venv
$ source ~/my_py_venv/bin/activate
(my_py_venv) $ pip install --user some_pkg
(my_py_venv) $ pip uninstall some_pkg
WARNING: Skipping some_pkg as it is not installed.
(my_py_venv) $ pip list
# Even `pip list` will not properly list the `some_pkg` in this case

Dalam hal ini, Anda harus menonaktifkan lingkungan virtual saat ini , kemudian menggunakan yang sesuai python/ pipdapat dieksekusi untuk mendaftar atau menghapus instalasi paket situs pengguna:

(my_py_venv) $ deactivate
$ path/to/python -m pip list
$ path/to/python -m pip uninstall some_pkg

Perhatikan bahwa masalah ini dilaporkan beberapa tahun yang lalu . Dan sepertinya kesimpulan saat ini adalah: --usertidak valid di dalam virtual env's pip, karena lokasi pengguna tidak benar-benar masuk akal untuk lingkungan virtual.

YaOzI
sumber
3
Terlambat !, Saya menggunakan --userdi dalam virtual env, apakah ada cara untuk mengembalikan itu?, Karena pip listtidak berfungsi ....
jnfran92
2
'Dan sepertinya kesimpulan saat ini adalah: - pengguna tidak valid dalam pip virtual env, karena lokasi pengguna tidak benar-benar masuk akal untuk lingkungan virtual.' Sepakat. Pemasangan pengguna mengalahkan seluruh tujuan lingkungan virtual. Sayangnya ada banyak contoh buruk orang melakukan ini di luar sana.
Stephen Bosch
5

Saya pikir itu mungkin untuk menghapus paket yang diinstal dengan --userflag. Yang ini bekerja untuk saya;

pip freeze --user | xargs pip uninstall -y

Untuk python 3;

pip3 freeze --user | xargs pip3 uninstall -y

Tapi entah bagaimana perintah ini tidak menghapus instalan setuptools dan pip. Setelah perintah itu (jika Anda benar-benar ingin membersihkan python) Anda dapat menghapusnya dengan;

pip uninstall setuptools && pip uninstall pip

haid
sumber
2
Ini adalah solusi elegan yang bekerja dengan baik untuk saya.
Stephen Bosch
2

Jawabannya belum memungkinkan . Anda harus menghapusnya secara manual.

Sorin
sumber
Saat memasang paket, ada traceback. Copot pemasangan tidak pernah berfungsi setelah itu.
syam
Bagaimana cara mendaftar semua file yang diinstal untuk paket yang diberikan (sehingga saya dapat menghapusnya)?
AstroFloyd
Secara efektif tidak mungkin karena pip menjalankan setup.py yang menjalankan kode eksternal. Sampai setup.py dihapus sepenuhnya lupakan saja, mungkin pada tahun 2022 akan jadi.
Sorin
2

Seperti @ thomas-lotze telah sebutkan, saat ini pip tooling tidak melakukan itu karena tidak ada opsi --user yang sesuai. Tapi yang saya temukan adalah saya bisa check in ~ / .local / bin dan mencari pip #. # Yang menurut saya cocok dengan opsi --user.

Dalam kasus saya:

antho@noctil: ~/.l/bin$ pwd
/home/antho/.local/bin
antho@noctil: ~/.l/bin$ ls pip*
pip  pip2  pip2.7  pip3  pip3.5

Dan kemudian hapus instalasi dengan versi pip tertentu.

AnthonyC
sumber
stackoverflow.com/a/11250821/14420 untuk melihat resep untuk menghapus instalasi bath, misalnya ./pip2 freeze | grep -v "^-e" | xargs pip uninstall -yuntuk semuanya kecuali paket yang diinstal dalam mode yang dapat diedit
matt wilkie
0

Saya menjalankan Anaconda versi 4.3.22 dan lingkungan python3.6.1, dan mengalami masalah ini. Inilah sejarah dan perbaikannya:

pip uninstall opencv-python # -- the original step. failed.

ImportError: DLL load failed: The specified module could not be found.

Saya melakukan ini ke lingkungan python3.6 saya dan mendapatkan kesalahan ini.

python -m pip install opencv-python # same package as above.
conda install -c conda-forge opencv # separate install parallel to opencv
pip-install opencv-contrib-python # suggested by another user here. doesn't resolve it.

Selanjutnya, saya mencoba mengunduh python3.6 dan meletakkan python3.dll di folder dan di berbagai folder. Tidak ada yang berubah.

akhirnya, ini memperbaikinya:

pip uninstall opencv-python

(versi conda-forge lainnya masih diinstal) Ini hanya menyisakan versi conda, dan itu berfungsi di 3.6.

>>>import cv2
>>>

kerja!

Marc Maxmeister
sumber