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?

Serjik
źródło
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
1
Powiązane: pip nie odinstalowuje pakietów poza sys.prefix
Piotr Dobrogost

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.

Thomas Lotze
źródło
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
Huy - Logarit
źródło
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.

YaOzI
źródło
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

thiras
źródło
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.

sorin
źródło
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.

AnthonyC
źródło
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!

Marc Maxmeister
źródło