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!
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
.
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).
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 .
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é.
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.
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.