pip没有卸载软件包

Dav*_*vid 23 shell pip python-2.7

背景

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

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

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)python-twitter在pypi中被调用twitter,(b)被调用,所以我将如何引用它们.

这两个都是import twitter在Python解释器中调用的,但是当我写那行时,我总是得到那一行twitter(如果我能弄清楚如何使用python-twitter它,我将能够继续,但仍然会有相同的底层问题).


问题

由于我不需要twitter包,我决定用pip卸载它:

$ sudo pip uninstall twitter

它给出了输出:

Uninstalling twitter:
Proceed (y/n)? y
  Successfully uninstalled twitter
Run Code Online (Sandbox Code Playgroud)

(实际上,我尝试了同样的事情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)
Run Code Online (Sandbox Code Playgroud)

为什么其他问题没有解决这个问题:

我查看了pip冻结列表中的类似帖子已卸载的软件包,并没有遇到同样的问题.

$ sudo which pip
/usr/bin/pip
$ which pip
/usr/bin/pip
Run Code Online (Sandbox Code Playgroud)

这是相同的输出.另外,$ sudo pip freeze给出相同的输出$ pip freeze.

很感谢任何形式的帮助!

Mar*_*ers 42

您始终可以手动删除包; 你可以运行:

sudo rm -rf /usr/local/lib/python2.7/dist-packages/twitter
Run Code Online (Sandbox Code Playgroud)

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

  • 是啊.这恰好发生在我身上.有谁知道是什么原因造成的? (5认同)
  • @BrettWidmeier,问题的原因是在debian版本的pip中进行了一些修改,这也是ubuntu包的源代码.请参阅下面的答案. (2认同)

Oz1*_*123 12

虽然马丁的解决方案可行,但作为一种解决方法,它并没有提供直接的答案.Ubuntu的Ubuntu版本(12.04)的pip版本是:

 python-pip (1.0-1build1)
Run Code Online (Sandbox Code Playgroud)

这也是Debian Wheezy的相同版本.这个版本有一个weired bug,导致不删除包.
如果你使用脚本从上游获得pip,get-pip.py你将拥有一个固定版本的pip,它可以删除pacakges(截至目前为1.5.6).

更新

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

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

  • 你可以在这里找到`get-pip.py`:http://pip.readthedocs.org/en/latest/installing.html (4认同)