pip没有卸载软件包

时间:2013-01-28 22:54:11

标签: shell python-2.7 pip

背景

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

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

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

b)twitter1.9.1http://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')twitterpython-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相同的输出。

非常感谢任何帮助!

4 个答案:

答案 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手动安装手动下载的包。不漂亮,但工作。