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

73

J'ai accidentellement installé des paquets Python sur mon système en utilisant à la pipplace de apt-get. Je l'ai fait de deux manières:

  • en utilisant une ancienne version de virtualenv, j’avais oublié d’ajouter --no-site-packageslors de la création de virtualenv - ensuite, lorsque j’ai appelé pip install, les packages Python ont été installés sur le système plutôt que virtualenv.
  • dans virtualenv correctement configuré, j’ai tapé sudo pip install somepackage- le sudo installé sur le système plutôt que le virtualenv

J'ai remarqué cela parce que je tapais à l' pip freezeextérieur de virtualenv et que je découvrais certains paquets Python répertoriés qui ne devraient pas être là. Alors maintenant ma question est:

  • Comment puis-je identifier tous les packages Python qui ont été installés par erreur sur le système (c'est-à-dire les packages Python qui apparaissent dans la pip freezeliste, mais n'ont pas été installés avec apt-get)?
  • Comment puis-je les supprimer?
david.libremone
la source

Réponses:

56

Ubuntu Oneiric (et j'attends également les versions les plus récentes) installe les packages pip /usr/local/lib/python2.7/dist-packageset les aptpackages /usr/lib/python2.7/dist-packages. Il suffit donc de vérifier l’ancien répertoire et sudo pip uninstallchaque paquet que vous trouvez là-bas.

Capi Etheriel
la source
12
Je suis allé brutal et publié sudo rm -r /usr/local/lib/python2.7. Jusqu'ici tout va bien.
Apteryx
@ Apteryx, j'ai fait de même avec /usr/local/lib/python3.5, et après un certain temps, une mise à jour du update-notifier-commonpaquet a échoué à cause du sixpaquet Python 3 manquant . J'ai fini par installer sixavec sudo -H pip3 install six.
Alexey
2
@ Apteryx dieu vous maudit mec! J'ai fait la même chose et maintenant tout mon système est foutu en l'air! car presque tout à Ubuntu repose sur Python!
yukashima huksay
J'ai remarqué que j'ai maintenant un tas d'exécutables cassés dans /usr/local/bin/(il y a quelque temps, je viens de retirer /usr/local/lib/python3.5et de passer à conda ).
Alexey
22

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

pip freeze > dump.txt

Editez le fichier vidé pour supprimer toutes les -elignes "d'installation éditable", tout après le ==signe ( %s;==.*;;gdans vim), remplacez les nouvelles lignes par des espaces ( %s;\n; ;gdans vim). Ensuite, vous pouvez désinstaller tous les packages non propriétaires avec

cat dump.txt | xargs sudo pip uninstall -y

J'ai dû faire cette procédure deux fois, car quelques paquets ont également été installés ~/.local/lib.

Henry Schreiner
la source
1
Cela devrait être la réponse acceptée pour moi
Nam G VU
3
Quelqu'un voudrait-il un vipless one-liner:sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
Benoit Duffez
4
Prudent! Cela dépend si votre système d'exploitation fournit une version spéciale de pip. Sur archlinux, pipdésinstallez avec plaisir les packages système. Par contre, pipJessica se plaint et commet des erreurs:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas G.
1
avez-vous besoin du sudo? - cela devrait certainement être la réponse acceptée
Jonathan
6

Autant que sudo pip installje sache installer sur /usr/local/lib/pythonVERSION/dist-packages. Vous devez exécuter sudo pip uninstallpour désinstaller les packages système. Il semble que cela pip freezerecherche les métadonnées du paquet et listera tout ce qui est installé, à la fois de pip et d’apt-get en dehors de virtualenvs. Il existe une -loption dans l’environnement virtuel pour répertorier les packages uniquement applicables à cet environnement virtuel, mais cela semble également être le cas par défaut dans l’environnement virtuel. Je pense que vous pouvez simplement supprimer les paquets liés /usr/local/lib/pythonVERSION/dist-packagesaussi mais méthode pas très pratique, je suppose.

Sagarchalise
la source
5

Pour supprimer un paquet installé via pip, appuyez simplement sur les touches Ctrl+ et Alt+ Tde votre clavier pour ouvrir Terminal. Quand il s'ouvre, lancez la commande ci-dessous.

pip uninstall < package-name >

Pour rechercher des forfaits

pip search <package you want to search for>

Pour déterminer quels packages Python ont été installés par pip, à l'aide de la freezecommande, qui vous donnera une liste des packages installés et de leurs versions. Je suggère de supprimer toutes les instances et de réinstaller à l'aide de la sudo apt-getcommande

sudo apt-get install python3
Mitch
la source
Comment déterminer quels paquets Python ont été installés par pip et quels sont ceux d'apt-get? puis-je encore pip uninstallsi j'ai utilisé sudo pip installen premier lieu?
david.libremone
@ d3vid pip freezeaffiche uniquement les packages qu'il a installés (AFAICS).
Oli
1
@oli pip freeze, au moins avec précision, répertorie également les paquets installés par apt, comme décrit dans les autres réponses.
Nealmcb
0

Je devais nettoyer l'espace disque des paquets Python en toute sécurité. Bien qu'il s'agisse d'un nettoyage complet des packages, j'avais également besoin de déplacer les versions de Python afin de ne pas utiliser d'anciens packages. J'ai utilisé ce qui suit pour obtenir tous mes noms de paquets, ignorer les 2 premières lignes et récupérer la première colonne, puis désinstaller sans interaction de l'utilisateur:

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

Cela a quelque chose à voir avec Homebrew. Pyodbc sur mon Mac Air ne me posait aucun problème avant d’installer Homebrew et de l’utiliser pour quelques tâches. J'ai trouvé ce fil sur github qui aboutit à une solution qui a fonctionné pour moi.

"Si vous avez Homebrew, installez simplement les en-têtes ODBC:

$ brew install unixodbc

et exécutez "pip install pyodbc" à nouveau. "

Ce 100% a résolu le problème pour moi et n'a pris qu'un moment. Donner un coup de feu.

Pogo
la source
Peut-être avez-vous besoin de poster ceci sur Ask Different? apple.stackexchange.com
david.libremone