Comment désinstaller des packages modifiables avec pip (installé avec -e)

107

J'ai installé des paquets avec -e

> pip install -e git+https://github.com/eventray/horus.git@2ce62c802ef5237be1c6b1a91dbf115ec284a619#egg=horus-dev

I avec pip freeze je vois

> pip freeze
...
-e git+https://github.com/eventray/horus.git@2ce62c802ef5237be1c6b1a91dbf115ec284a619#egg=horus-dev
...

lorsque j'essaye de désinstaller les packages, j'obtiens des erreurs:

> pip uninstall horus-dev
Cannot uninstall requirement horus-dev, not installed

> pip uninstall horus
Cannot uninstall requirement horus, not installed

Comment désinstaller un tel package?

Michael_Scharf
la source
pip uninstall <package> désinstalle les packages installés en mode éditable dans les versions récentes de pip (le mien est 19.1.1). Assurez-vous d'utiliser le nom du package dans setup.py et non l'alias que vous spécifiez pour appeler ce package dans entry_points
picmate 涅
pour les personnes utilisant conda, pour désinstaller en mode dev dans conda faites:conda develop -u .
Charlie Parker
Avez-vous compris pourquoi pip uninstall yourpackagen'a pas fonctionné? Vous aimez ce que signifient vos erreurs? Semble sortie étrange de la commande ...
Charlie Parker
Avez-vous essayé pip uninstall -e .ou python setup.py develop -u?
Charlie Parker
2
Pour moi, cela pip uninstall librarya très bien fonctionné. Si vous allez à la réponse fournie par l'OP, il semble que c'est quelque chose de bizarre avec sa bibliothèque qui a été corrompue. Espérons que cela permettra aux gens de gagner du temps la prochaine fois qu'ils viendront ici. Cependant, il existe de nombreuses options différentes qui pourraient fonctionner.
Charlie Parker

Réponses:

90

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

  • retirer la lime à œufs (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 vers le répertoire source ou d'un fichier egg).
glarrain
la source
43
Un peu de surprise, il n'y a pas de méthode de désinstallation correspondante pour cela.
Drake Guan
4
@Drake oui, assez ennuyeux en fait
glarrain
4
Avec la version actuelle de pip, la désinstallation fonctionne bien également pour les packages installés avec l' -eoption.
famousgarkin
9
pour moi utilisant 8.1.2, pip uninstall package_namefonctionne, mais pip uninstall .ne fonctionne pas
confused00
5
Il y a un problème ouvert contre pip ici pour la possibilité de supprimer les packages installés modifiables.
Chris Hunt
22

Un moyen plus simple de faire de même avec la nouvelle version de setup_tools consiste à exécuter ce qui suit:

python setup.py develop -u

Ce qui fait essentiellement la même chose que ce que @glarrain décrit dans sa réponse.

Ahmed Shariff
la source
2
est-il censé y avoir une sortie pour cette commande? Je comprends running developmais je reste le .egg-infofichier ... est-il censé le supprimer?
Pinocchio
Quelle est la "nouvelle version de setup_tools" pour laquelle cette réponse fonctionne? Pouvez-vous confirmer cela s'il vous plaît?
Charlie Parker
Votre réponse garantit-elle qu'il n'est pas nécessaire de supprimer les minces manuellement?
Charlie Parker
Il ne produit aucune sortie. D'après ce que j'ai compris, il devrait le supprimer: "--uninstall, -u Désinstalle le projet en cours. Vous pouvez utiliser l'option --install-dir ou -d pour désigner la zone de préparation. Le fichier .egg-link créé sera être supprimé, s'il est présent et qu'il pointe toujours vers le répertoire du projet. " à partir de la documentation setuptools . Après avoir exécuté cela, charge-t-il toujours le contenu du répertoire de développement?
Ahmed Shariff
@CharlieParker Je ne sais pas dans quelle version cela a été introduit. Je n'ai jamais eu à supprimer manuellement ces fichiers.
Ahmed Shariff
10

Installez un package de développement en utilisant cmd:

pip install --editable .

Désinstaller:

rm -r $(find . -name '*.egg-info')

Vous pouvez maintenant utiliser:

pip uninstall package_name 

ou python setup.py develop --uninstalloupython setup.py develop -u

Legolas Bloom
la source
4
Pouvez-vous spécifier où vous exécutez cette deuxième commande s'il vous plaît?
ethanabrooks
1
@ethanabrooks .est le répertoire courant, vous utilisez le chemin absolu complet du package.
Legolas Bloom
1
Incomplet. Qu'en est-il de tous les packages Python? ( site-packagesdir)
Jorge Orpinel
Cela n'annule pas complètement l'installation. Il supprime les éléments du dossier à partir duquel le package a été installé, mais ne supprime pas le lien symbolique dans votre dist-packagesrépertoire (où Python recherche le package installé). Nettoyant à utiliser python setup.py develop -u.
Mark Amery le
@MarkAmery Merci, pip uninstall package_nametravaillez maintenant.
Legolas Bloom le
6

Ceci est un bogue sur debian / ubuntu linux utilisant pip installé sur le système d'exploitation (v8.1.1 pour moi), ce que vous invoquerez sudo pipmême si vous avez mis à jour pip (par exemple, get-pip.py). Voir https://github.com/pypa/pip/issues/4438

Pour une discussion sur la façon de nettoyer, voir /ubuntu/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip , bien que les solutions existent des "tout supprimer" variété.

... les packages pip [aller] à /usr/local/lib/python2.7/dist-packages, et les packages apt à/usr/lib/python2.7/dist-packages

... quelques packages ont également été installés ~/.local/lib.

Pour mon système, tout ce dont j'avais besoin pour supprimer était /usr/local/lib/python2.7/dist-packages/{package_name}.egg-link

matt wilkie
la source
Pour moi, cela pip uninstall librarya très bien fonctionné. Si vous allez à la réponse fournie par l'OP, il semble que c'est quelque chose de bizarre avec sa bibliothèque qui a été corrompue. Espérons que cela permettra aux gens de gagner du temps la prochaine fois qu'ils viendront ici. Cependant, il existe de nombreuses options différentes qui pourraient fonctionner
Charlie Parker
5

Il s'avère que mon installation était en quelque sorte corrompue.

Je pourrais trouver l'entrée dans:

/usr/local/lib/python2.7/site-packages/easy-install.pth

Pour résoudre le problème, j'ai supprimé la ligne du fichier .pth à la main!

import sys; sys.__plen = len(sys.path)
...
/absolute-path-to/horus  # <- I removed this line
...
Michael_Scharf
la source
1
Qu'est-ce que cela signifie que votre installation était corrompue?
Charlie Parker
-1

Désinstallez simplement le package que vous avez installé en mode `` modifiable '':

pip uninstall yourpackage
Apteryx
la source
9
OP a essayé cela et le dit dans sa question. Cela ne fonctionne pas nécessairement avec les paquets installés comme `` modifiables ''
dusktreader
2
@dusktreader: Je ne suis pas sûr de ce qui se passe avec la pip uninstallcommande OP (peut-être une version obsolète de pip?), mais j'ai vérifié que dans des circonstances normales, il fait exactement ce qui a été suggéré de faire manuellement dans la réponse acceptée par @glarrain. Si cela ne fonctionne pas pour vous, veuillez détailler ce que vous faites ici afin que nous puissions approfondir le problème.
Apteryx
@Apteryx attendez-vous que cela fonctionne même en mode modifiable?
Charlie Parker
Cette réponse a fonctionné pour moi. Je pense que cela n'a pas fonctionné pour l'OP parce que si vous vérifiez sa réponse, il avait une installation corrompue étrange (ou son ordinateur était dans un état étrange). pip uninstall pkgfonctionne afaik.
Charlie Parker