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:
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'
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.
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.
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 --
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:
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) .
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.
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/
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
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;
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:
À {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).
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.
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.
pip uninstall <your_package>
. Voir stackoverflow.com/questions/1231688/… .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.Réponses:
Remarque: évitez d'
python setup.py install
utiliserpip 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'
--record
option et consulter la liste que cela produit.Pour enregistrer une liste de fichiers installés, vous pouvez utiliser:
Une fois que vous souhaitez désinstaller, vous pouvez utiliser xargs pour effectuer la suppression:
Ou si vous exécutez Windows, utilisez Powershell:
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/
surmacOS
. Il n'a pas de fichiers, mais Python importera toujours un module vide:Une fois supprimé, Python affiche:
la source
cat files.txt | xargs sudo rm -rf
Pour moi, ce qui suit fonctionne principalement:
avoir pip installé, par exemple:
Vérifiez, comment votre package installé est-il nommé du point de vue pip:
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:
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.rdstmc
sur MS Windows.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
ensurepip
permettant 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
grep
oufind
Les exemples ci-dessus supposent que vous avez
grep
installé. J'avais (à l'époque j'avais MS Windows sur ma machine) installé un ensemble d'utilitaires Linux (incl. Grep). Alternativement, utilisez MS Windows natiffind
ou ignorez simplement ce filtrage et trouvez le nom dans une liste un peu plus longue de packages python détectés.la source
distutils
,distribute
, Etc ...)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.setuptools
, en fait j'utilisedistribute
. 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.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 ~/bin
etln -s /home/tflutre/.local/bin/pip2 ~/bin
.pip uninstall module
oupython -m pip uninstall module
devrait fonctionner. Devrait également être multiplateforme, comme cela fait partie de Python.La réponse n ° 1 a des problèmes:
xargs
commande échouera et supprimera tous les fichiers / répertoires qui correspondent aux mots individuels.-r
enrm -rf
est inutile et au pire pourrait supprimer des choses que vous ne voulez pas.À la place, pour unix-like:
Et pour les fenêtres:
Il existe également des problèmes insolubles avec la désinstallation de l'
setup.py
installation 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
la source
OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
printf
l' 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
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
:Lorsque vous souhaitez désinstaller, vous pouvez simplement:
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.
la source
Maintenant, python vous donne le choix d'installer
pip
pendant l'installation (je suis sur Windows, et au moins python le fait pour Windows!). Considérant que vous aviez choisi d'installerpip
lors de l'installation de python (vous n'avez pas vraiment à choisir car c'est par défaut),pip
est déjà installé pour vous. Ensuite, tapez dans l'pip
invite 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 utiliserpour désinstaller tout paquet dont vous ne voulez plus. En savoir plus ici (documentation pip) .
la source
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,
("foo" étant un exemple bien sûr).
la source
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/
la source
Pas exactement répondre à la question, mais quelque chose qui m'aide tous les jours:
Installez vos packages avec
Cela met le paquet
$HOME/.local
. Désinstaller avecla source
pip unistall .
n'a pas fonctionné pour moi, mais l'apip uninstall <package_name>
fait, merci!Vous pouvez probablement le faire comme alternative: -
1) Obtenez la version python -
-> 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 -
-> 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
Cela a fonctionné pour moi .. Et j'ai pu désinstaller le package qui me dérangeait :)
la source
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':
la source
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 ...
Et hop. Désinstallé.
la source
sudo xargs rm -v < install.record
.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
build
est également supprimé. Par conséquent, en supposant quepkg
c'est le package que vous souhaitez supprimer:Obove travailler pour python3 et supprimer le paquet et son fichier * .egg-info
la source
À
{virtualenv}/lib/python2.7/site-packages/
(si vous n'utilisez pas virtualenv alors{system_dir}/lib/python2.7/dist-packages/
)distribute-0.6.34-py2.7.egg
)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).la source
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.
la source
J'avais exécuté
python setup.py install
une 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.
la source
Il peut être préférable de supprimer les fichiers associés à l'aide de bash pour lire les commandes, comme suit:
la source