Comment désinstaller un package python qui a été installé à l'aide de distutils?

92

Pouvez-vous simplement supprimer le répertoire de votre installation python, ou y a-t-il des fichiers persistants que vous devez supprimer?

Hortitude
la source

Réponses:

45

Cela varie en fonction des options que vous passez installet du contenu des fichiers de configuration distutils sur le système / dans le package. Je ne pense pas que les fichiers soient modifiés en dehors des répertoires spécifiés de cette manière.

Notamment, distutils n'a pas de commande de désinstallation pour le moment.

Il convient également de noter que la suppression d'un paquet / œuf peut entraîner des problèmes de dépendance - des utilitaires comme easy_installtenter de résoudre de tels problèmes.

cdleary
la source
4
Pouvez-vous mettre à jour ceci pour traiter directement la partie des fichiers en attente de la question?
S.Lott
Je pensais l'avoir fait - aucun fichier n'est créé en dehors des répertoires spécifiés par la configuration distutils et les drapeaux d'installation, donc tous les fichiers "persistants" existeront dans ces répertoires. Cela varie d'un paquet à l'autre.
cdleary
2
@cdleary: merci, mais j'espérais que vous clarifieriez et renforceriez simplement votre réponse, sans ajouter un long fil de commentaires.
S.Lott
2
@ S.Lott: Désolé, mais je ne sais pas sur quelle partie de la réponse vous voulez des éclaircissements - pouvez-vous être plus précis?
cdleary
1
msg139773 Date: 2011-07-04 14:35 distutils2 / packaging fournit désormais une fonction remove et une commande pysetup remove.
Edward
19

Les trois éléments installés que vous devrez supprimer sont:

  1. Paquets / modules
  2. Les scripts
  3. Fichiers de données

Maintenant, sur mon système Linux, ceux-ci vivent dans:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr / share

Mais sur un système Windows, ils sont plus susceptibles d'être entièrement dans le répertoire de distribution Python. Je n'ai aucune idée d'OSX sauf qu'il est plus proche de suivre le modèle Linux.

Ali Afshar
la source
14

Un autre hack basé sur l'horodatage:

  1. Créez une ancre: touch /tmp/ts
  2. Réinstallez le package à supprimer: python setup.py install --prefix=<PREFIX>
  3. Supprimez les fichiers qui sont plus récents que le fichier d'ancrage: find <PREFIX> -cnewer /tmp/ts | xargs rm -r
Maximk
la source
1
-1. Je n'aime pas le | xargs rm -r. Je recommande de parcourir chaque fichier manuellement . Sur ext4 (et d'autres systèmes de fichiers), cela findva également répertorier tous les dossiers . Si votre préfixe était /usr, vous allez supprimer/usr/* .
Mateen Ulhaq
8

Oui, il est sûr de simplement supprimer tout ce qui est installé. Cela vaut pour les dossiers installés ou les fichiers .egg. Naturellement, tout ce qui dépend de ce code ne fonctionnera plus.

Si vous voulez le faire fonctionner à nouveau, réinstallez simplement.

À propos, si vous utilisez distutils, envisagez également d'utiliser la fonctionnalité multi-version. Il vous permet d'installer plusieurs versions d'un seul package. Cela signifie que vous n'avez pas besoin de supprimer une ancienne version d'un package si vous souhaitez simplement installer une version plus récente.

Salim Fadhley
la source
5

Dans ubuntu 12.04, j'ai trouvé que le seul endroit où vous devez regarder par défaut est sous

/usr/local/lib/python2.7/

Et supprimez simplement le dossier et le fichier associés, s'il y en a un!

Hydrox24
la source
Parfois dans / usr / lib / python <2.7 / 3.6>
Vineet le
4

Si c'est à des fins de test et / ou de développement, setuptools dispose d'une commande de développement qui se met à jour à chaque fois que vous effectuez une modification (vous n'avez donc pas à désinstaller et réinstaller à chaque fois que vous effectuez une modification). Et vous pouvez également désinstaller le package à l'aide de cette commande.

Si vous l'utilisez, tout ce que vous déclarez en tant que script sera laissé comme fichier en attente.

Jason Baker
la source
4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

supprime tous les fichiers et laisse les répertoires vides derrière.

Ce n'est pas idéal, cela devrait suffire pour éviter les conflits de paquets.

Et puis vous pouvez terminer le travail manuellement si vous le souhaitez en lisant files.txt , ou être plus courageux et automatiser également la suppression des répertoires vides.

Une aide sûre serait:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

Testé en Python 2.7.6, Ubuntu 14.04.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
la source
3

pour Python sous Windows:

python -m pip uninstall "package_keyword"
uninstall **** (y/n)?
user8074545
la source
2

Je viens de désinstaller un package python, et même si je ne suis pas sûr de l' avoir fait parfaitement, je suis raisonnablement confiant.

J'ai commencé par obtenir une liste de tous les fichiers liés à python, classés par date, en supposant que tous les fichiers de mon package auront plus ou moins le même horodatage, et aucun autre fichier ne le sera.

Heureusement, j'ai installé python sous /opt/Python-2.6.1; si j'avais utilisé le Python fourni avec ma distribution Linux, j'aurais dû tout parcourir /usr, ce qui aurait pris beaucoup de temps.

Ensuite , je viens d' examiner cette liste, et noté avec soulagement que toutes les choses que je voulais Nuke se composait d'un répertoire, /opt/Python-2.6.1/lib/python2.6/site-packages/module-name/et un fichier, /opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info.

Alors je viens de les supprimer.

Voici comment j'ai obtenu la liste des fichiers triés par date:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(Je pense que ça doit être GNU "find", au fait; la saveur que vous obtenez sur OS X ne connaît pas "-printf '% T @'")

J'utilise ça tout le temps.

offby1
la source
2

Pour Windows 7,

Panneau de configuration -> Programmes -> Désinstaller

, puis

choisissez le package python à supprimer.

b_dev
la source
@Mauricio Je ne vois pas d'anciennes versions dans la liste mais je peux voir les fichiers egg dans les packages du site. Est-ce un problème?
1

Sous Mac OSX, supprimez manuellement ces 2 répertoires sous votre cheminToPython / site-packages / fonctionnera:

  • {nom du paquet}
  • {packageName} - {version} -info

par exemple, pour supprimer pyasn1 , qui est un projet installé distutils:

  • rm -rf lib / python2.7 / packages-site / pyasn1
  • rm -rf lib / python2.7 / site-packages / pyasn1-0.1.9-py2.7.egg-info

Pour savoir où se trouvent vos packages de site:

python -m site
Lynne
la source
1
Fonctionne comme prévu.
c1377554 le
-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

Puis je tape:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

Terminé!

Goodpen
la source
1
Veuillez essayer d'expliquer ce que vous faites et pourquoi au lieu de simplement afficher la sortie de la console.
Headhunter Xamd