Comment désinstaller un package installé avec pip install --user

219

Il existe une --useroption pour pip qui peut installer un package Python par utilisateur:

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

J'ai utilisé cette option pour installer un package sur un serveur pour lequel je n'ai pas d'accès root. Ce dont j'ai besoin maintenant, c'est de désinstaller le package installé sur l'utilisateur actuel. J'ai essayé d'exécuter cette commande:

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

Mais j'ai:

no such option: --user

Comment puis-je désinstaller un package que j'ai installé pip install --user, à part rechercher et supprimer manuellement le package?

J'ai trouvé cet article

pip ne peut pas désinstaller du répertoire des packages de site par utilisateur

qui décrit que la désinstallation des packages du répertoire utilisateur n'est pas prise en charge. Selon l'article, s'il a été correctement mis en œuvre, alors avec

pip uninstall [package-name]

le package installé sera également recherché dans les répertoires utilisateur. Mais un problème demeure pour moi. Que faire si le même package a été installé à l'échelle du système et par utilisateur? Que faire si quelqu'un a besoin de cibler un annuaire d'utilisateurs spécifique?

Serjik
la source
1
Non, vous devez définir un virtualenv par utilisateur: group et donner les autorisations système appropriées au dossier qui le contient.
danius
3
Il n'existe aucun moyen d'installer un package à l'échelle du système pour tous les utilisateurs, puis de le désinstaller de manière sélective pour certains utilisateurs. Si le package a été installé au --usermoment de la désinstallation, sans --userfera ce que vous voulez.
tripleee
@tripleee: Je n'ai pas de système d'autorisation à l'échelle et je ne veux pas, j'ai juste besoin de le désinstaller par utilisateur actuel
Serjik
1
Déterminez quel répertoire vous n'avez pas les autorisations de supprimer et corrigez ses autorisations, ou déplacez-le manuellement sur le côté.
tripleee
1
EN RELATION
Piotr Dobrogost

Réponses:

196

Après avoir testé cela en utilisant Python 3.5 et pip 7.1.2 sous Linux, la situation semble être la suivante:

  • pip install --user somepackageinstalle sur $HOME/.local, et la désinstallation fonctionne en utilisant pip uninstall somepackage.

  • Cela est vrai, qu'il soit somepackageinstallé ou non à l'échelle du système en même temps.

  • Si le package est installé aux deux endroits, seul le local sera désinstallé. Pour désinstaller le package à l'échelle du système à l'aide de pip, désinstallez-le d'abord localement, puis réexécutez la même commande de désinstallation, avec des rootprivilèges.

  • En plus du répertoire d'installation utilisateur prédéfini, pip install --target somedir somepackageinstallera le package dans somedir. Il n'y a aucun moyen de désinstaller un package d'un tel emplacement à l'aide de pip. (Mais il y a une ancienne requête pull non fusionnée sur Github qui implémente pip uninstall --target.)

  • Étant donné que les seuls emplacements où la pipdésinstallation sera jamais effectuée sont à l'échelle du système et prédéfinis utilisateur local, vous devez exécuter en pip uninstalltant qu'utilisateur respectif pour désinstaller à partir du répertoire d'installation local d'un utilisateur donné.

Thomas Lotze
la source
2
Ces instructions sont-elles précises pour exécuter pip dans un environnement virtuel?
kbolino
dans mon cas, la désinstallation n'a pas fonctionné pour le package pip 9.0.1 est toujours installé à HOME /./ local
Genom
2
Le point 2 ne semble pas être vrai sur mon système. J'ai un package système jediinstallé dans /usr/lib64/python2.7/site-packages/. Quand je le fais, en tant qu'utilisateur normal: pip install --user jedi et puis pip uninstall jedi, pip essaie de désinstaller /usr/lib64/python2.7/site-packages/jedipuis démarre avec Permission denied. Donc, s'il --usern'existe pas pour la commande de désinstallation, comment dire à désinstaller de ne pas essayer de désinstaller /usr/lib64/python2.7/site-packages/jedimais ~/.local/lib64/python3.6/site-packages/jedi?
AstroFloyd
Exactement la même chose ici que @AstroFloyd
Nikana Reklawyks
28

exemple pour désinstaller le package 'oauth2client' sur MacOS:

pip uninstall oauth2client
Huy - Logarit
la source
9

Soyez prudent cependant, pour ceux qui utilisent à l' pip install --user some_pkg intérieur d'un environnement virtuel .

$ 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

Dans ce cas, vous devez désactiver l'environnement virtuel actuel , puis utiliser le correspondant python/ pipexécutable pour répertorier ou désinstaller les packages du site utilisateur:

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

Notez que ce problème a été signalé il y a quelques années . Et il semble que la conclusion actuelle soit: --usern'est pas valide à l'intérieur d'un pipenvironnement virtuel, car un emplacement utilisateur n'a pas vraiment de sens pour un environnement virtuel.

YaOzI
la source
3
Trop tard !, j'ai utilisé l' --userintérieur de l'env virtuel, y a-t-il un moyen de revenir sur ça?, Parce que pip listça ne marche pas ....
jnfran92
2
"Et il semble que la conclusion actuelle soit: - L'utilisateur n'est pas valide dans le pip d'un env virtuel, car un emplacement utilisateur n'a pas vraiment de sens pour un environnement virtuel." D'accord. Les installations utilisateur vont à l'encontre de l'objectif global d'un environnement virtuel. Malheureusement, il existe de nombreux mauvais exemples de personnes faisant cela.
Stephen Bosch
5

Je pense qu'il est possible de désinstaller les packages installés avec --userflag. Celui-ci a fonctionné pour moi;

pip freeze --user | xargs pip uninstall -y

Pour python 3;

pip3 freeze --user | xargs pip3 uninstall -y

Mais en quelque sorte, ces commandes ne désinstallent pas setuptools et pip. Après ces commandes (si vous voulez vraiment du python propre), vous pouvez les supprimer avec;

pip uninstall setuptools && pip uninstall pip

Thiras
la source
2
C'est une solution élégante qui a bien fonctionné pour moi.
Stephen Bosch
2

La réponse n'est pas encore possible . Vous devez le supprimer manuellement.

Sorin
la source
Lors de l'installation d'un package, il y a eu un retraçage. La désinstallation n'a jamais fonctionné après cela.
syam
Comment répertorier tous les fichiers pip installés pour un package donné (afin de pouvoir les supprimer)?
AstroFloyd
Il est effectivement impossible car pip exécute setup.py qui exécute du code externe. Jusqu'à ce que setup.py soit complètement supprimé, oubliez-le, probablement d'ici 2022.
sorin
2

Comme l'a mentionné @ thomas-lotze, actuellement l'outillage pip ne fait pas cela car il n'y a pas d'option --user correspondante. Mais ce que je trouve, c'est que je peux archiver ~ / .local / bin et rechercher le pip #. # Qui me semble correspondre à l'option --user.

Dans mon cas:

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

Et puis désinstallez simplement avec la version pip spécifique.

AnthonyC
la source
stackoverflow.com/a/11250821/14420 pour voir la recette de la désinstallation du bain, par exemple ./pip2 freeze | grep -v "^-e" | xargs pip uninstall -ypour tout sauf les packages installés en mode modifiable
matt wilkie
0

J'utilise Anaconda version 4.3.22 et un environnement python3.6.1 et j'ai eu ce problème. Voici l'historique et le correctif:

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

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

J'ai fait cela dans mon environnement python3.6 et j'ai eu cette erreur.

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.

Ensuite, j'ai essayé de télécharger python3.6 et de placer python3.dll dans le dossier et dans divers dossiers. Rien n'a changé.

enfin, cela l'a corrigé:

pip uninstall opencv-python

(l'autre version de conda-forge est toujours installée) Cela n'a laissé que la version de conda, et cela fonctionne en 3.6.

>>>import cv2
>>>

travail!

Marc Maxmeister
la source