35

背景

我正在做一个学术项目(基本上)分析一些“谁跟随谁”图表,并希望使用 Python Twitter API 包之一从 Twitter 获取一些真实数据(通过构建一些小数据集)以测试一些想法我有。

我有点粗心,安装了两个包:

a) python-twitter0.8.2( http://pypi.python.org/pypi/python-twitter/0.8.2 )

b)twitter1.9.1http://pypi.python.org/pypi/twitter/1.9.1

(a)python-twitter在 pypi 中被调用, (b) 被调用twitter,所以我将这样称呼它们。

这两个都import twitter在 Python 解释器中被调用,但是当我写那一行时,我总是得到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显示在列表中。输入help('modules')shell 解释器时,我得到一个分段错误错误,解释器崩溃。这是错误:

>>> 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

很感谢任何形式的帮助!

4

5 回答 5

57

您可以随时手动删除包;你可以运行:

sudo rm -rf /usr/local/lib/python2.7/dist-packages/twitter

从您的dist-packages目录中删除该软件包。您可能必须编辑easy-install.pth同一目录中的文件并twitter从中删除条目。

于 2013-01-28T23:04:56.160 回答
15

虽然 Martin 的解决方案有效,但作为一种变通方法,它并没有提供直接的答案。Ubuntu 的 Ubuntu 版本 (12.04) 的 pip 版本是:

 python-pip (1.0-1build1)

这也是 Debian Wheezy 的相同版本。这个版本有一个奇怪的错误,导致包不能被删除。
如果您使用脚本从上游获取 pip,get-pip.py您将拥有一个可以删除 pacakges 的固定版本的 pip(截至现在 v. 1.5.6)。

更新

Python 的 pip 确实是一个快速移动的目标。所以使用 Debian 或 Ubuntu 的 pip 肯定会有 bug。 不要使用那些发行版的pip. 而是从上游安装 pip。

如果您想将 pip 安装的包注册为系统包,我真的建议您也使用stdeb

于 2014-11-17T09:20:16.457 回答
4

我在升级软件包时遇到了困难,因为 pip 无法成功卸载它。我不得不删除 .egg-info 和 /usr/lib/python2.7/dist-packages 中的文件夹,然后我尝试使用 --upgrade 进行安装,它成功了。

于 2015-01-17T18:20:52.657 回答
2

对我来说,这是因为我正在跑步pip freeze,这给了我与sudo pip freeze.

由于我是使用卸载的sudo,它没有在“非sudo”会话中卸载它。卸载没有sudo修复。

于 2015-10-09T10:19:18.543 回答
1

在我的情况下(将 pyusb 0.4x 移动到 1.0x),使用 apt-get remove python-usb 删除旧包并通过 python setup.py 手动安装手动下载的包。不漂亮,但工作。

于 2015-05-07T17:06:14.230 回答