désinstallation de python setup.py


787

J'ai installé un paquet python avec python setup.py install.

Comment le désinstaller?


52
La réponse acceptée est obsolète. Utilisez pip uninstall <your_package>. Voir stackoverflow.com/questions/1231688/… .
Joachim W

21
désinstaller pip n'est plus une réponse valide. Voici la preuve. [sri @ localhost python] $ pip uninstall foo DEPRECATION: La désinstallation d'un projet installé distutils (foo) est obsolète et sera supprimée dans une future version. Cela est dû au fait que la désinstallation d'un projet distutils ne désinstallera que partiellement le projet.
musaraigne

@shrewmouse qui ne s'affiche plus.
JC Rocamonde

@JCRocamonde Avec un package que j'ai créé, la dernière version de pip s'affiche 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.donc c'est toujours un problème.
Josh

@Josh en haut de votre fichier setup.py faites "depuis setuptools import setup" au lieu de "depuis distutils.core import setup".
bigjake

Réponses:


977

Remarque: évitez d' python setup.py installutiliserpip install .

Vous devez supprimer tous les fichiers manuellement et également annuler toute autre opération effectuée manuellement par l'installation.

Si vous ne connaissez pas la liste de tous les fichiers, vous pouvez la réinstaller avec l' --recordoption et consulter la liste que cela produit.

Pour enregistrer une liste de fichiers installés, vous pouvez utiliser:

python setup.py install --record files.txt

Une fois que vous souhaitez désinstaller, vous pouvez utiliser xargs pour effectuer la suppression:

xargs rm -rf < files.txt

Ou si vous exécutez Windows, utilisez Powershell:

Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}

Supprimez ensuite également le répertoire contenant, par exemple /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/sur macOS. Il n'a pas de fichiers, mais Python importera toujours un module vide:

>>> import my_module
>>> my_module.__file__
None

Une fois supprimé, Python affiche:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'

6
Si cela ne fonctionne pas, ajoutez sudo comme suit:cat files.txt | xargs sudo rm -rf
saroele

21
Cela gâchera les fichiers avec des espaces. Voir ma réponse ci-dessous: stackoverflow.com/a/25209129/14456
Ian Kelling

1
Comment puis-je réinstaller le package dont j'ai le code source d'utilisation de setup.py?
ア レ ッ ク ス

5
Cela laisse également des répertoires vides à leur place.
Dilawar

3
Salut, j'ai essayé votre suggestion, pour certains fichiers lorsque j'essaie cat files.txt | xargs rm -rf indique l'autorisation refusée, même en mode sudo, par exemple pour / usr / local / bin / pydoc ou / usr / local / bin / idle Des idées pourquoi?

212

Pour moi, ce qui suit fonctionne principalement:

avoir pip installé, par exemple:

$ easy_install pip

Vérifiez, comment votre package installé est-il nommé du point de vue pip:

$ pip freeze

Ceci doit lister les noms de tous les packages que vous avez installés (et qui ont été détectés par pip). Le nom peut être long, puis utilisez uniquement le nom du package affiché à la fois et après #egg=. Vous pouvez également dans la plupart des cas ignorer la partie de la version (ce qui suit ==ou -).

Désinstallez ensuite le package:

$ pip uninstall package.name.you.have.found

S'il vous demande de confirmer la suppression du colis, vous êtes chanceux et il sera supprimé.

pip doit détecter tous les packages installés par pip. Il doit également détecter la plupart des packages installés via easy_install ou setup.py, mais cela peut dans de rares cas échouer.

Voici un exemple réel de mon test local avec un package nommé ttr.rdstmcsur MS Windows.

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev

$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
  c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
  Successfully uninstalled ttr.rdstmc

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

Modifier 2015-05-20

Tout ce qui est écrit ci-dessus s'applique toujours, de toute façon, de petites modifications sont disponibles maintenant.

Installer pip dans python 2.7.9 et python 3.4

Les versions récentes de python sont livrées avec un package ensurepippermettant d'installer pip même hors ligne:

$ python -m surepip --upgrade

Sur certains systèmes (comme Debian Jessie), cela n'est pas disponible (pour éviter de casser l'installation de python système).

Utilisation de grepoufind

Les exemples ci-dessus supposent que vous avez grepinstallé. J'avais (à l'époque j'avais MS Windows sur ma machine) installé un ensemble d'utilitaires Linux (incl. Grep). Alternativement, utilisez MS Windows natif findou ignorez simplement ce filtrage et trouvez le nom dans une liste un peu plus longue de packages python détectés.


1
quel outil / version d'emballage utilisez-vous pour que cela fonctionne? ( distutils, distribute, Etc ...)
Ciro Santilli郝海东冠状病六四事件法轮功

1
J'utilise setuptools. Vous pouvez vérifier bitbucket.org/vlcinsky/ttr.aws.utils.s3 (ce qui n'est pas parfait). Quoi qu'il en soit, je suis assez mécontent de l'utilisation des packages d'espace de noms, parfois l'importation est interrompue sans raison visible. Mais c'est une autre histoire.
Jan Vlcinsky

1
me corriger. Même si j'importe setuptools, en fait j'utilise distribute. Une autre leçon: lorsque vous installez mon propre package à partir de pypi et que vous prévoyez d'en développer un autre en partageant localement le même espace de noms, n'utilisez pas $ pip install <the package> , utilisez $ easy_install <the package>, sinon vous rencontrez des conflits lors de l'importation de votre package de développement.
Jan Vlcinsky

1
Pour aider les autres: parce que je ne suis pas root, j'installe tout chez moi. Voici ce que j'ai fait easy_install --user --prefix=$HOME pip. Ensuite , j'ajouté ce qui suit dans mon chemin: ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/binet ln -s /home/tflutre/.local/bin/pip2 ~/bin.
tflutre

3
Cette réponse devrait être acceptée, car c'est beaucoup plus facile et pip est généralement livré avec Python de toute façon. Il est simple à utiliser dans l'invite de commande / terminal - pip uninstall moduleou python -m pip uninstall moduledevrait fonctionner. Devrait également être multiplateforme, comme cela fait partie de Python.
Edward

81

La réponse n ° 1 a des problèmes:

  • Ne fonctionnera pas sur mac.
  • Si un fichier est installé qui comprend des espaces ou d'autres caractères spéciaux, la xargscommande échouera et supprimera tous les fichiers / répertoires qui correspondent aux mots individuels.
  • l' -ren rm -rfest inutile et au pire pourrait supprimer des choses que vous ne voulez pas.

À la place, pour unix-like:

sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

Et pour les fenêtres:

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

Il existe également des problèmes insolubles avec la désinstallation de l' setup.pyinstallation qui ne vous dérangeront pas dans un cas typique. Pour une réponse plus complète, consultez cette page wiki:

https://ofswiki.org/wiki/Uninstalling_setup.py_install


3
Pourquoi ne laissez-vous simplement pas une suggestion sous celle qui a été votée? Notez que ces «problèmes graves» concernent les cas d'angle.
lpapp

17
J'ai laissé un commentaire sous le vote positif. Mon commentaire est enterré sous un lien "charger plus de commentaires" sur lequel très peu de gens cliquent. J'ai également fait ma propre réponse parce que j'avais beaucoup plus à dire, à savoir. le lien dans ma réponse. De plus, le cas d'angle ne serait pas le premier terme qui me vient à l'esprit lorsqu'un fichier contient un espace.
Ian Kelling

Pour ce que ça vaut, je pense que cela échouera sur les noms de fichiers qui contiennent des nouvelles lignes :)
Jack O'Connor

2
Sur OS X Mavericks, au moins, xargs n'a pas l'option -d. Pourquoi? Parce qu'Apple vous aime. Quoi qu'il en soit, cela a les mêmes effets que ci-dessus et est sûr avec des espaces et autres. C'est spécifique à Bash, cependant. Après avoir exécuté l'installation avec --record to files.txt:OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Joseph Sikorski

2
@IanKelling L'incorporation de variables à printfl' intérieur de la chaîne de formatage échouera si la chaîne contient par exemple des caractères %ou \. Fournissez toujours une chaîne de format: printf '%s\0' "$line"(évite également l'écho). Bien que vous puissiez éviter davantage la boucle en utilisant simplementtr '\n' '\0' < files.txt | xargs -0 rm -f
geirha

39

Enregistrez d'abord les fichiers que vous avez installés. Vous pouvez répéter cette commande, même si vous avez déjà exécuté setup.py install:

python setup.py install --record files.txt

Lorsque vous souhaitez désinstaller, vous pouvez simplement:

sudo rm $(cat files.txt)

Cela fonctionne car la commande rm prend une liste de fichiers séparés par des espaces à supprimer et votre enregistrement d'installation est exactement une telle liste.


Existe-t-il un moyen de vérifier non seulement si c'est mon programme qui l'a installé mais aussi si depuis lors, aucune autre application n'a utilisé cette ressource? Par exemple, j'ai installé un outil, pour ce faire, j'ai dû installer plusieurs bibliothèques, peut-être que certaines d'entre elles étaient déjà installées (ce qui signifie que je ne peux pas supprimer dans le processus de désinstallation) mais aussi je ne peux pas supprimer quoi que ce soit que d'autres applications n'a pas installé parce que ma bibliothèque avait installé en premier ..
Gabrielle

19

Maintenant, python vous donne le choix d'installer pippendant l'installation (je suis sur Windows, et au moins python le fait pour Windows!). Considérant que vous aviez choisi d'installer piplors de l'installation de python (vous n'avez pas vraiment à choisir car c'est par défaut), pipest déjà installé pour vous. Ensuite, tapez dans l' pipinvite de commande, vous devriez voir apparaître une aide. Vous pouvez y trouver les instructions d'utilisation nécessaires. Par exemplepip list , vous montre la liste des packages installés. Vous pouvez utiliser

pip uninstall package_name

pour désinstaller tout paquet dont vous ne voulez plus. En savoir plus ici (documentation pip) .


8

La manière paresseuse: désinstallez simplement à partir du menu d'installation de Windows (si vous utilisez Windows), ou à partir de la commande rpm, à condition de le réinstaller après avoir créé un package de distribution.

Par exemple,

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

("foo" étant un exemple bien sûr).


4
Je ne sais pas si j'aime ça, mais vous obtenez un point pour la pensée orthogale. :)
Lennart Regebro

Pour être honnête, je ne suis pas sûr non plus d'où "la manière paresseuse" ;-) Mais j'ai pensé que je mentionnerais qu'il était possible de créer plus d'installateur "standard". Il est étrange que setup.py ne fournisse pas un moyen propre de supprimer les packages.
RedGlyph

1
Les désinstallations nécessitent des registres centralisés des packages installés et de ses fichiers, et il n'y en a pas. Des discussions sont en cours sur la façon d'améliorer cette histoire et elle pourrait être résolue en Python 2.7 / 3.2 ou 2.8 / 3.3 ou plus.
Lennart Regebro

1
@Lennart: il n'y aura pas Python 2.8 au moins c'est la déclaration officielle actuelle
Piotr Owsiak

2
@PiotrOwsiak: Oui, mais ce n'était pas la déclaration à l'époque. 2.8 était encore possible à cette époque et le restait jusqu'à l'approbation du PEP 404, fin de l'année dernière, je pense.
Lennart Regebro

6

Accédez à votre répertoire de package python et supprimez votre fichier .egg, par exemple: En python 2.5 (ubuntu): /usr/lib/python2.5/site-packages/

En python 2.6 (ubuntu): /usr/local/lib/python2.6/dist-packages/


1
Fonctionne, sauf si l'installation installe des fichiers en dehors du package, ce que certains font, comme setuptools qui installe et la commande easy_install.
Lennart Regebro

3
Normalement, si un paquet était installé en utilisant python setup.py comme spécifié par l'OP, il n'y aurait pas d'oeuf. OTOH, s'il y en a un parce que easy_install a été utilisé, la manière documentée de désinstaller des packages est d'utiliser easy_install -m avant de supprimer le fichier egg; sinon, les coquilles d'oeufs peuvent être laissées dans le fichier easy-install.pth.
Ned Deily

5

Pas exactement répondre à la question, mais quelque chose qui m'aide tous les jours:

Installez vos packages avec

pip install .

Cela met le paquet $HOME/.local. Désinstaller avec

pip uninstall <package_name>

1
pip unistall .n'a pas fonctionné pour moi, mais l'a pip uninstall <package_name>fait, merci!
Danijel

4

Vous pouvez probablement le faire comme alternative: -

1) Obtenez la version python -

[linux machine]# python
Python 2.4.3 (#1, Jun 18 2012, 14:38:55) 

-> La commande ci-dessus vous donne la version actuelle de python qui est 2.4.3

2) Obtenez le répertoire d'installation de python -

[linux machine]# whereis python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python2.5 /usr/include/python2.4 /usr/share/man/man1/python.1.gz

-> De la commande ci-dessus, vous pouvez obtenir le répertoire d'installation qui est - /usr/lib/python2.4/site-packages

3) De là, vous pouvez supprimer les packages et les fichiers d'oeufs python

[linux machine]# cd /usr/lib/python2.4/site-packages
[linux machine]# rm -rf paramiko-1.12.0-py2.4.egg paramiko-1.7.7.1-py2.4.egg paramiko-1.9.0-py2.4.egg

Cela a fonctionné pour moi .. Et j'ai pu désinstaller le package qui me dérangeait :)


3

Je pense que vous pouvez ouvrir le fichier setup.py, localiser le nom du package, puis demander à pip de le désinstaller.

En supposant que le nom est disponible dans une variable 'METADATA':

pip uninstall $(python -c "from setup import METADATA; print METADATA['name']")

1

S'étendant sur ce que Martin a dit, l'enregistrement de la sortie d'installation et un peu de script bash font très bien l'affaire. Voici ce que je fais ...

for i in $(less install.record);
sudo rm $i;
done;

Et hop. Désinstallé.


2
Il est beaucoup plus facile d'écrire cela sudo xargs rm -v < install.record.
poolie

1

Si vous avez toujours des fichiers qui sont censés être supprimés après la réinstallation d'un package, assurez-vous que le dossier buildest également supprimé. Par conséquent, en supposant que pkgc'est le package que vous souhaitez supprimer:

rm -r $(python3 -c "import pkg; print(pkg.__path__[0] + '*' )") 
rm -rf build

Obove travailler pour python3 et supprimer le paquet et son fichier * .egg-info


1

À {virtualenv}/lib/python2.7/site-packages/(si vous n'utilisez pas virtualenv alors {system_dir}/lib/python2.7/dist-packages/)

  • Retirez le fichier d'oeufs (par exemple distribute-0.6.34-py2.7.egg)
  • S'il y en a du fichier easy-install.pth, supprimez la ligne correspondante (il doit s'agir d'un chemin d'accès au répertoire source ou d'un fichier d'oeuf).

0

J'avais exécuté "python setup.py install" à un moment donné dans le passé accidentellement dans mon environnement global, et j'ai eu beaucoup de mal à désinstaller. Ces solutions n'ont pas aidé. "désinstallation pip" ne fonctionnait pas avec "Impossible de désinstaller 'splunk-appinspect'. Aucun fichier à désinstaller n'a été trouvé." "sudo pip uninstall" ne fonctionnait pas "Impossible de désinstaller l'exigence splunk-appinspect, not installed". J'ai essayé de désinstaller pip, de supprimer le cache pip, de rechercher le package sur mon disque dur, etc.

"pip show" m'a finalement conduit à la solution, "Location:" pointait vers un répertoire, et renommer ce répertoire provoquait la suppression du pack de la liste de pip. J'ai renommé le répertoire en arrière, et il n'est pas réapparu dans la liste de pip, et maintenant je peux réinstaller mon paquet dans un virtualenv.


0

J'avais exécuté python setup.py installune fois dans mon PyCharm, il installe tous les packages dans mon environnement de conda base. Plus tard, lorsque je veux supprimer tous ces packages,pip uninstall cela ne fonctionne pas. J'ai dû les supprimer manuellement de /anaconda3/lib/python3.7/site-packages :(

Je ne vois donc pas la raison pour laquelle ils utilisent setup.py au lieu d'écrire le fichier requirements.txt. Le fichier d'exigences peut être utilisé pour installer des packages dans un environnement virtuel et ne gâchera pas avec les packages python système.


-1

Il peut être préférable de supprimer les fichiers associés à l'aide de bash pour lire les commandes, comme suit:

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"

Ceci est une copie d'une réponse antérieure existante.
Karl Richter
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.