背景
我正在研究一个学术项目(基本上)分析一些“跟随谁”的图表,并希望通过一个Python Twitter API包从Twitter获得一些真实数据(通过构建一些小数据集)测试我的一些想法。
我有点粗心,并安装了两个包:
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)在pypi中被称为python-twitter
,而(b)被称为twitter
,因此我将如何引用它们。
这两个都是由Python解释器中的import twitter
调用的,但是当我写这行时,我总是得到twitter
一个(如果我能弄清楚如何使用python-twitter
一,我将能够继续,但仍会有相同的潜在问题。)
问题
由于我不需要twitter
包,我决定用pip卸载它:
$ sudo pip uninstall twitter
给出输出:
Uninstalling twitter:
Proceed (y/n)? y
Successfully uninstalled twitter
(实际上,我在python-twitter
尝试了同样的事情并得到了类似的回复)。
但是,在运行pip freeze
时,这两个软件包都会显示在已安装的列表中!实际上,我仍然可以在解释器中成功使用import twitter
命令。显然,包没有被卸载。我想知道的是如何卸载它们!
其他信息
我正在使用Python 2.7和Ubuntu 12.04
当运行IDLE而不是shell解释器时,我输入help('modules')
,twitter
和python-twitter
都不会显示在列表中。在shell解释器中输入help('modules')
时,出现分段错误错误,解释器崩溃。这是错误:
>>> 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)
为什么其他问题没有解决这个问题:
我查看pip freeze lists uninstalled packages处的类似帖子,并没有遇到同样的问题。
$ sudo which pip
/usr/bin/pip
$ which pip
/usr/bin/pip
这是相同的输出。此外,$ sudo pip freeze
提供与$ pip freeze
相同的输出。
非常感谢任何帮助!
答案 0 :(得分:40)
您可以随时手动删除包裹;你可以跑:
sudo rm -rf /usr/local/lib/python2.7/dist-packages/twitter
从dist-packages
目录中删除该包。您可能必须编辑同一目录中的easy-install.pth
文件,并从中删除twitter
条目。
答案 1 :(得分:12)
虽然马丁的解决方案有效,但作为一种解决方法,它并没有提供直接的答案。 适用于Ubuntu版本(12.04)的Ubuntu pip版本是:
python-pip (1.0-1build1)
这也是Debian Wheezy的相同版本。这个版本有一个weired bug,导致不删除包
如果你使用脚本get-pip.py
从上游获得pip,你将拥有一个固定版本的pip,可以删除pacakges(截至目前为1.5.6)。
Python的pip实际上是一个快速移动的目标。所以使用Debian或Ubuntu的pip肯定会有bug。 请不要使用这些发布内容pip
。
而是从上游安装pip。
如果您想将pip安装的软件包注册为系统软件包,我建议您也使用stdeb。
答案 2 :(得分:1)
我在升级软件包时遇到了困难,因为pip无法成功卸载它。我不得不在/usr/lib/python2.7/dist-packages中删除.egg-info和文件夹,然后我尝试使用--upgrade安装并且它有效。
答案 3 :(得分:0)
在我的情况下(将pyusb移动0.4x到1.0x),使用apt-get删除旧包,删除python-usb并通过python setup.py手动安装手动下载的包。不漂亮,但工作。