81 votes

Comment détecter et supprimer les packages Python installés via pip?

J'ai accidentellement installé des packages Python sur mon système en utilisant pip au lieu de apt-get. J'ai fait cela de deux manières :

  • en utilisant une ancienne version de virtualenv, j'ai oublié d'ajouter --no-site-packages lors de la création de l'environnement virtuel - après cela, quand j'ai appelé pip install, les packages Python ont été installés sur le système plutôt que dans l'environnement virtuel
  • dans un environnement virtuel correctement configuré, j'ai tapé sudo pip install somepackage - le sudo a installé sur le système plutôt que dans l'environnement virtuel

J'ai remarqué cela car j'ai tapé pip freeze en dehors d'un environnement virtuel, et j'ai vu des packages Python listés qui ne devraient pas y être. Alors maintenant, ma question est :

  • comment puis-je identifier tous les packages Python qui ont été installés de manière erronée sur le système (c'est-à-dire les packages Python qui apparaissent dans la liste pip freeze, mais n'ont pas été installés avec apt-get)?
  • comment puis-je les supprimer?

59voto

Eugene Yokota Points 43213

Ubuntu Oneiric (et je m'attends aux versions plus récentes aussi) installe les packages pip dans /usr/local/lib/python2.7/dist-packages, et les packages apt dans /usr/lib/python2.7/dist-packages. Donc il suffit de vérifier le premier répertoire et de sudo pip uninstall tous les packages que vous trouverez là.

30voto

Henry Schreiner Points 401

Pip ignore actuellement les commandes de désinstallation qui tentent de désinstaller quelque chose détenu par le système d'exploitation. Il ne renvoie pas d'erreur, comme il le fait avec un paquet manquant. Donc, maintenant vous pouvez désinstaller avec le processus suivant :

pip freeze > dump.txt

Modifiez le fichier dumpé pour supprimer toutes les lignes -e "installation modifiable", tout ce qui suit le signe == (%s;==.*;;g dans vim), échangez les nouvelles lignes par des espaces (%s;\n; ;g dans vim). Ensuite, vous pouvez désinstaller tous les paquets non possédés avec

cat dump.txt | xargs sudo pip uninstall -y

J'ai dû effectuer cette procédure deux fois, car quelques paquets étaient installés dans ~/.local/lib aussi.


Un raccourci pour accomplir ceci :

pip freeze | grep -vP '^(?:#|-e\s)' | sed 's;==.*;;g' | xargs -r sudo pip uninstall -y

7voto

rck Points 151

Selon ce que je sais, sudo pip install s'installera sur /usr/local/lib/pythonVERSION/dist-packages. Vous devez exécuter sudo pip uninstall pour désinstaller les packages au niveau du système. Il semble que pip freeze recherche les métadonnées des packages et listera tout ce qui est installé, à la fois à partir de pip et de apt-get en dehors des environnements virtuels. Il y a l'option -l à l'intérieur de l'environnement virtuel pour lister uniquement les packages applicables à cet environnement virtuel, mais cela semble être également le cas par défaut à l'intérieur de l'environnement virtuel. Je pense que vous pouvez simplement supprimer les packages associés dans /usr/local/lib/pythonVERSION/dist-packages, mais ce n'est pas une méthode très pratique à mon avis.

5voto

Mitch Points 102545

Pour supprimer un package installé via pip, appuyez simplement sur Ctrl+Alt+T sur votre clavier pour ouvrir le Terminal. Quand il s'ouvre, exécutez la commande ci-dessous.

pip uninstall < nom-du-package >

Pour rechercher des packages

pip search 

Pour déterminer quels packages Python ont été installés via pip, utilisez la commande freeze, qui vous donnera une liste des packages installés et leurs versions. Je recommande de supprimer toutes les instances, puis de réinstaller en utilisant la commande sudo apt-get

sudo apt-get install python3

0voto

graycrow Points 1175

J'ai dû libérer de l'espace disque en toute sécurité des packages Python. Bien que ce soit un nettoyage complet des packages, j'ai dû également déplacer les versions de Python pour ne pas avoir besoin des anciens packages. J'ai utilisé ce qui suit pour obtenir tous les noms de mes packages, sauter les 2 premières lignes et récupérer la première colonne, et désinstaller sans interaction utilisateur :

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X