Jak odinstalować pakiet zainstalowany za pomocą pip install --user


219

Istnieje --useropcja dla pip, która może zainstalować pakiet Python na użytkownika:

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

Skorzystałem z tej opcji, aby zainstalować pakiet na serwerze, do którego nie mam uprawnień roota. Teraz potrzebuję odinstalować zainstalowany pakiet na bieżącym użytkowniku. Próbowałem wykonać to polecenie:

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

Ale mam:

no such option: --user

Jak mogę odinstalować pakiet, który zainstalowałem pip install --user, oprócz ręcznego znajdowania i usuwania pakietu?

Znalazłem ten artykuł

pip nie może odinstalować z katalogu pakietów witryny dla użytkownika

który opisuje, że odinstalowywanie pakietów z katalogu użytkownika nie jest obsługiwane. Zgodnie z artykułem, jeśli został poprawnie zaimplementowany, to za pomocą

pip uninstall [package-name]

zainstalowany pakiet zostanie przeszukany również w katalogach użytkowników. Ale wciąż pozostaje mi problem. Co jeśli ten sam pakiet został zainstalowany zarówno dla całego systemu, jak i dla jednego użytkownika? Co się stanie, jeśli ktoś będzie musiał kierować reklamy na określony katalog użytkowników?


1
Nie, musisz ustawić jednego virtualenv na użytkownika: zgrupować i nadać odpowiednie uprawnienia systemowe folderowi, który go zawiera.
— danius

3
Nie ma sposobu, aby zainstalować pakiet dla całego systemu dla wszystkich użytkowników, a następnie selektywnie go odinstalować dla niektórych użytkowników. Jeśli pakiet został zainstalowany jako, --userwówczas odinstalowanie bez --userspowoduje zrobienie tego, co chcesz.
— tripleee

@tripleee: Nie mam systemu uprawnień i nie chcę tego, po prostu muszę go odinstalować dla bieżącego użytkownika
— Serjik

1
Dowiedz się, którego katalogu nie masz uprawnień do usunięcia i napraw jego uprawnienia lub ręcznie przenieś go na bok.
— tripleee

Odpowiedzi:


196

Po przetestowaniu tego za pomocą Pythona 3.5 i pip 7.1.2 w systemie Linux wygląda na to, że:

  • pip install --user somepackageinstaluje się $HOME/.locali odinstalowanie działa przy użyciu pip uninstall somepackage.

  • Dzieje się tak niezależnie od tego, czy somepackagesystem jest instalowany jednocześnie w całym systemie.

  • Jeśli pakiet jest zainstalowany w obu miejscach, tylko lokalny zostanie odinstalowany. Aby odinstalować pakiet w całym systemie pip, najpierw odinstaluj go lokalnie, a następnie ponownie uruchom tę samą komendę odinstalowania z rootuprawnieniami.

  • Oprócz wstępnie zdefiniowanego katalogu instalacyjnego użytkownika zainstaluje pip install --target somedir somepackagepakiet w somedir. Nie ma sposobu na odinstalowanie pakietu z takiego miejsca przy użyciu pip. (Ale na Github istnieje nieco stara, nie połączona prośba ściągania pip uninstall --target.)

  • Ponieważ jedyne miejsca pip, z których kiedykolwiek odinstalujesz, to ogólnosystemowe i predefiniowane lokalne dla użytkownika, musisz uruchomić pip uninstalljako odpowiedni użytkownik, aby odinstalować z lokalnego katalogu instalacyjnego danego użytkownika.


2
Czy te instrukcje są dokładne do uruchamiania pip w środowisku wirtualnym?
— kbolino

w moim przypadku deinstalacja nie działała dla pakietu PIP 9.0.1 jest nadal zainstalowany w HOME /./ local
— Genom

2
Punkt 2 wydaje się nieprawdziwy w moim systemie. Mam jedizainstalowany pakiet systemowy /usr/lib64/python2.7/site-packages/. Kiedy to robię, jako normalny użytkownik: pip install --user jedi a następnie pip uninstall jedipip próbuje odinstalować, /usr/lib64/python2.7/site-packages/jedia następnie uruchamia się przy pomocy Permission denied. Więc jeśli --usernie istnieje dla polecenia dezinstalacji, jak mam powiedzieć deinstalatorowi, aby nie próbował odinstalować, /usr/lib64/python2.7/site-packages/jediale ~/.local/lib64/python3.6/site-packages/jedi?
— AstroFloyd,

Dokładnie tak samo jak tutaj @AstroFloyd
— Nikana Reklawyks

28

przykład odinstalowania pakietu „oauth2client” na MacOS:

pip uninstall oauth2client

9

Uważaj jednak na tych, którzy korzystają pip install --user some_pkg z wirtualnego środowiska .

$ 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

W takim przypadku musisz dezaktywować bieżące środowisko wirtualne , a następnie użyć odpowiedniego pliku python/ pippliku wykonywalnego, aby wyświetlić listę lub odinstalować pakiety witryny użytkownika:

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

Pamiętaj, że ten problem został zgłoszony kilka lat temu . I wydaje się, że obecny wniosek jest następujący: --usernie jest poprawny w wirtualnej środowisku pip, ponieważ lokalizacja użytkownika tak naprawdę nie ma sensu w środowisku wirtualnym.


3
Za późno !, użyłem --userw wirtualnej env, czy jest jakiś sposób, aby to cofnąć ?, ponieważ pip listnie działa ....
— jnfran92 17.09.19

2
„I wydaje się, że obecny wniosek jest następujący: - użytkownik nie jest poprawny w pipie wirtualnej env, ponieważ lokalizacja użytkownika tak naprawdę nie ma sensu w środowisku wirtualnym”. Zgoda. Użytkownik instaluje pokonać cały cel środowiska wirtualnego. Niestety istnieje wiele złych przykładów ludzi, którzy to robią.
— Stephen Bosch

5

Myślę, że można odinstalować pakiety zainstalowane z --userflagą. Ten działał dla mnie;

pip freeze --user | xargs pip uninstall -y

Dla python 3;

pip3 freeze --user | xargs pip3 uninstall -y

Ale w jakiś sposób te polecenia nie odinstalowują setuptools i pip. Po tych poleceniach (jeśli naprawdę chcesz wyczyścić Pythona) możesz je usunąć za pomocą;

pip uninstall setuptools && pip uninstall pip


2
To eleganckie rozwiązanie, które dobrze mi się sprawdziło.
— Stephen Bosch

2

Odpowiedź nie jest jeszcze możliwa . Musisz usunąć go ręcznie.


Podczas instalowania pakietu wystąpił ślad zwrotny. Odinstalowanie nigdy nie działało później.
— syam

Jak wyświetlić listę wszystkich plików pip zainstalowanych dla danego pakietu (aby móc je usunąć)?
— AstroFloyd,

Jest to praktycznie niemożliwe, ponieważ pip uruchamia setup.py, który uruchamia zewnętrzny kod. Dopóki plik setup.py nie zostanie całkowicie usunięty, zapomnij o nim, prawdopodobnie do 2022 roku.
— sorin,

2

Jak wspomniał @ thomas-lotze, obecnie narzędzia do pipowania tego nie robią, ponieważ nie ma odpowiedniej opcji --user. Ale uważam, że mogę sprawdzić ~ / .local / bin i poszukać konkretnego pip #. #, Który wygląda na to, że odpowiada opcji --user.

W moim przypadku:

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

A następnie po prostu odinstaluj z określoną wersją pip.


stackoverflow.com/a/11250821/14420, aby zobaczyć przepis na odinstalowanie kąpieli, np. ./pip2 freeze | grep -v "^-e" | xargs pip uninstall -yna wszystko oprócz pakietów zainstalowanych w trybie edytowalnym
— Matt Wilkie

0

Używam Anacondy w wersji 4.3.22 i środowiska python3.6.1 i miałem ten problem. Oto historia i poprawka:

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

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

Zrobiłem to w moim środowisku python3.6 i otrzymałem ten błąd.

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.

Następnie próbowałem pobrać python3.6 i umieścić python3.dll w folderze i różnych folderach. nic się nie zmieniło.

w końcu to naprawiło:

pip uninstall opencv-python

(druga wersja conda-forge jest nadal zainstalowana) To pozostawiło tylko wersję conda i działa w wersji 3.6.

>>>import cv2
>>>

pracujący!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.