web-dev-qa-db-fra.com

pip ne désinstalle pas les paquets

Contexte

Je travaille sur un projet académique pour analyser (en gros) des graphes "qui suit qui" et qui souhaitaient obtenir de vraies données (en construisant de petits ensembles de données) à partir de Twitter en utilisant l'un des packages de l'API Twitter de Python afin de tester certaines idées. J'ai.

J'étais un peu négligent et j'ai installé deux paquets:

a) python-Twitter0.8.2 ( http://pypi.python.org/pypi/python-Twitter/0.8.2 )

b) Twitter1.9.1 ( http://pypi.python.org/pypi/Twitter/1.9.1 )

(a) s'appelle python-Twitter dans pypi, et (b) s'appelle Twitter, c'est pourquoi je ferai référence à eux.

Les deux sont appelés par import Twitter dans l’interpréteur Python, mais lorsque j’écris cette ligne, j’ai toujours la valeur Twitter (si je peux comprendre comment utiliser la méthode python-Twitter, je pourrai continuer, mais il me restera le même problème sous-jacent).


Problème

Comme je n'ai pas besoin du paquet Twitter, j'ai décidé de le désinstaller avec pip:

$ Sudo pip uninstall Twitter

ce qui donne la sortie:

Uninstalling Twitter:
Proceed (y/n)? y
  Successfully uninstalled Twitter

(en fait, j'ai essayé la même chose avec python-Twitter et obtenu une réponse similaire).

Cependant, lors de l'exécution de pip freeze, ces deux packages apparaissent dans la liste des applications installées! En fait, je peux toujours utiliser la commande import Twitter avec succès dans l'interpréteur. Clairement les paquets n'ont pas été désinstallés. Ce que j'aimerais savoir, c'est comment les désinstaller!


Autre info

J'utilise Python 2.7 et Ubuntu 12.04

Lorsque j'exécute IDLE au lieu de l'interpréteur Shell et que je tape help('modules'), ni Twitter ni python-Twitter n'apparaissent dans la liste. Lors de la saisie de help('modules') dans l'interpréteur du shell, une erreur de segmentation est générée et l'interpréteur plante. Voici l'erreur:

>>> help('modules')

Please wait a moment while I gather a list of all available modules...

/usr/lib/python2.7/dist-packages/gobject/constants.py:24: Warning:
  g_boxed_type_register_static: assertion `g_type_from_name (name) == 0' failed
  import gobject._gobject
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning:
  g_boxed_type_register_static: assertion `g_type_from_name (name) == 0' failed
  from gtk import _gtk

** (python:2484): CRITICAL **: pyg_register_boxed: assertion `boxed_type != 0' failed
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning: cannot register
existing type `GdkDevice'
  from gtk import _gtk
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning: g_type_get_qdata: 
assertion `node != NULL' failed
  from gtk import _gtk
Segmentation fault (core dumped)

Pourquoi d'autres questions n'ont pas résolu ceci pour moi:

J'ai regardé le post similaire à pip freeze liste les paquets désinstallés et je n'ai pas les mêmes problèmes. 

$ Sudo which pip
/usr/bin/pip
$ which pip
/usr/bin/pip

qui est la même sortie. De plus, $ Sudo pip freeze donne le même résultat que $ pip freeze.

Toute aide est fortement appréciée!

23
David

Vous pouvez toujours supprimer manuellement les packages. tu peux courir:

Sudo rm -rf /usr/local/lib/python2.7/dist-packages/Twitter

pour supprimer ce paquet de votre répertoire dist-packages. Vous devrez peut-être modifier le fichier easy-install.pth dans le même répertoire et en supprimer l'entrée Twitter.

39
Martijn Pieters

Bien que la solution de Martin fonctionne, elle ne fournit pas de réponse directe. La version de pip d'Ubuntu pour votre version d'Ubuntu (12.04) est:

 python-pip (1.0-1build1)

C'est également la même version pour Debian Wheezy. Cette version a un bogue, ce qui empêche les paquets d'être supprimés.
Si vous obtenez pip en amont en utilisant le script get-pip.py, vous aurez une version fixe de pip qui peut supprimer les paquets (à partir de maintenant v. 1.5.6). 

mettre à jour

Le pip de Python est vraiment une cible en mouvement rapide. Donc, utiliser le pip de Debian ou d'Ubuntu est garanti d'avoir des bogues. Veuillez n'utilisez pas la variable pip de ces distributions. Au lieu d’installer le pip de l’amont. 

Si vous souhaitez enregistrer les packages installés par pip en tant que packages système, je vous recommande vivement d'utiliser également stdeb .

12
Oz123

Je rencontrais des difficultés lors de la mise à niveau d'un paquet car pip ne parvenait pas à le désinstaller correctement. J'ai dû supprimer le fichier .Egg-info et le dossier dans /usr/lib/python2.7/dist-packages puis j'ai essayé d'installer avec --upgrade et cela a fonctionné. 

1
Wahib Ul Haq

Pour moi, c'était dû au fait que j'utilisais pip freeze, ce qui m'a donné des résultats différents de ceux de Sudo pip freeze.

Depuis que je désinstallais en utilisant Sudo, il ne le désinstallait pas dans la session "non -Sudo". La désinstallation sans Sudo a résolu ce problème.

1
user2455127

Dans mon cas (déplacer pyusb 0.4x à 1.0x), supprimer l'ancien paquet avec apt-get remove python-usb et installer manuellement le paquet téléchargé manuellement via python setup.py ont fonctionné. Pas beau, mais travaillant.

0
Jasper