Een pakket verwijderen dat is geïnstalleerd met pip install –user

Er is een --useroptie voor pip die een Python-pakket per gebruiker kan installeren:

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

Ik heb deze optie gebruikt om een ​​pakket te installeren op een server waarvoor ik geen root-toegang heb. Wat ik nu nodig heb, is om het geïnstalleerde pakket op de huidige gebruiker te verwijderen. Ik heb geprobeerd dit commando uit te voeren:

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

Maar ik heb:

no such option: --user

Hoe kan ik een pakket verwijderen dat ik heb geïnstalleerd met pip install --user, anders dan het handmatig zoeken en verwijderen van het pakket?

Ik heb dit artikel gevonden

pip kan niet verwijderen uit de directory site-packages per gebruiker

waarin wordt beschreven dat het verwijderen van pakketten uit de gebruikersmap niet wordt ondersteund. Volgens het artikel als het correct is geïmplementeerd, dan met

pip uninstall [package-name]

het geïnstalleerde pakket wordt ook doorzocht in gebruikersmappen. Maar er blijft voor mij nog een probleem. Wat als hetzelfde pakket zowel systeembreed als per gebruiker is geïnstalleerd?
Wat als iemand een specifieke gebruikersdirectory moet targeten?


Antwoord 1, autoriteit 100%

Na dit te hebben getest met Python 3.5 en pip 7.1.2 op Linux, lijkt de situatie als volgt te zijn:

  • pip install --user somepackageinstalleert naar $HOME/.local, en het verwijderen ervan werkt wel met pip uninstall somepackage.

  • Dit is waar, ongeacht of somepackagetegelijkertijd ook voor het hele systeem is geïnstalleerd.

  • Als het pakket op beide plaatsen is geïnstalleerd, wordt alleen het lokale pakket verwijderd. Om het pakket voor het hele systeem te verwijderen met behulp van pip, verwijdert u het eerst lokaal en voert u hetzelfde de-installatiecommando opnieuw uit, met root-rechten.

  • Naast de vooraf gedefinieerde gebruikersinstallatiemap, zal pip install --target somedir somepackagehet pakket installeren in somedir. Er is geen manier om een ​​pakket van een dergelijke plaats te verwijderen met behulp van pip. (Maar er is een wat oud niet-samengevoegd pull-verzoek op Github dat pip uninstall --targetimplementeert.)

  • Aangezien de enige plaatsen waar pipooit verwijderd zal worden, het hele systeem en vooraf gedefinieerde gebruikers-lokaal zijn, moet je pip uninstalluitvoeren als de respectievelijke gebruiker om verwijderen uit de lokale installatiemap van een bepaalde gebruiker.


Antwoord 2, autoriteit 11%

voorbeeld om pakket ‘oauth2client’ op MacOS te verwijderen:

pip uninstall oauth2client

Antwoord 3, autoriteit 6%

Wees echter voorzichtig, voor degenen die pip install --user some_pkgin een virtuele omgevinggebruiken.

$ 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

In dit geval moet u de huidige virtuele omgeving deactiverenen vervolgens het bijbehorende uitvoerbare bestand python/pipgebruiken om de gebruikerssitepakketten:

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

Houd er rekening mee dat dit probleem een paar jaar geleden is gemeld. En het lijkt erop dat de huidige conclusieis: --useris niet geldig in de pipvan een virtuele omgeving, aangezien een gebruikerslocatie niet echt logisch is voor een virtuele omgeving.


Antwoord 4, autoriteit 5%

Ik raad je ten zeerste aan om virtuele omgevingen te gebruiken voor de installatie van python-pakketten. Met virtualenv voorkom je pakketconflicten en totale isolatie van je aan Python gerelateerde userland-commando’s.

Als u al uw wereldwijd geïnstalleerde pakketten wilt verwijderen, volgt u dit;

Het is mogelijk om pakketten te verwijderen die zijn geïnstalleerd met de vlag --user. Deze werkte voor mij;

pip freeze --user | xargs pip uninstall -y

Voor python 3;

pip3 freeze --user | xargs pip3 uninstall -y

Maar op de een of andere manier verwijderen deze commando’s setuptools en pip niet. Na die commando’s (als je echt een schone python wilt) kun je ze verwijderen met;

pip uninstall setuptools && pip uninstall pip

Nu heb je een schone Python-omgeving. U kunt virtualenv maken en het pakket erin installeren.


Antwoord 5

Het antwoord is Nog niet mogelijk. Je moet het handmatig verwijderen.


Antwoord 6

Zoals @thomas-lotze al zei, doet pip tooling dat momenteel niet omdat er geen corresponderende –user optie is. Maar wat ik vind is dat ik ~/.local/bin kan inchecken en kan zoeken naar de specifieke pip#.# die volgens mij overeenkomt met de –user optie.

In mijn geval:

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

En verwijder dan gewoon met de specifieke pip-versie.


Antwoord 7

Ik gebruik Anaconda versie 4.3.22 en een python3.6.1-omgeving en had dit probleem. Hier is de geschiedenis en de oplossing:

pip uninstall opencv-python # -- the original step. failed.
ImportError: DLL load failed: The specified module could not be found.

Ik deed dit in mijn python3.6-omgeving en kreeg deze foutmelding.

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.

Vervolgens probeerde ik python3.6 te downloaden en de python3.dll in de map en in verschillende mappen te plaatsen. Er is niets veranderd.

eindelijk heeft dit het opgelost:

pip uninstall opencv-python

(de andere conda-forge-versie is nog steeds geïnstalleerd) Dit liet alleen de conda-versie over, en dat werkt in 3.6.

>>>import cv2
>>>

werkt!

LEAVE A REPLY

Please enter your comment!
Please enter your name here

three × 5 =

Other episodes