当前位置: 首页>>技术问答>>正文


如何检测和删除通过pip安装的Python包?

, , ,

问题描述

我使用pip而不是apt-get意外地将Python软件包安装到我的系统中。我这样做有两种方式:

  • 使用较旧版本的virtualenv,我忘记在创建virtualenv时附加--no-site-packages – 之后我调用pip install时,Python软件包安装到系统而不是virtualenv

  • 在正确设置virtualenv中,我键入了sudo pip install somepackage – 安装到系统的sudo而不是virtualenv

我碰巧注意到了这一点,因为我在virtualenv之外输入了pip freeze,并发现了一些不应该出现的Python软件包。所以现在我的问题是:

  • 如何识别系统上错误安装的所有Python软件包(即出现在pip freeze列表中但未随apt-get一起安装的Python软件包)?

  • 我该如何删除它们?

最佳解决方法

Ubuntu Oneiric(我也期望更新的版本)将pip包安装到/usr/local/lib/python2.7/dist-packages,将apt包安装到/usr/lib/python2.7/dist-packages。因此,只需检查您在那里找到的每个包的前一个目录和sudo pip uninstall

次佳解决方法

Pip当前忽略尝试卸载操作系统所拥有的东西的卸载命令。它没有错误,就像缺少包一样。所以,现在您可以使用以下过程卸载:

pip freeze > dump.txt

编辑转储文件以删除任何-e “editable install”行,在==符号后面的所有内容(vim中为%s;==.*;;g),将新行换成空格(vim中的%s;\n; ;g)。然后你可以卸载所有un-owned包

cat dump.txt | xargs sudo pip uninstall -y

我不得不两次执行此过程,因为在~/.local/lib中也安装了一些软件包。

第三种解决方法

AFAIK sudo pip install将安装在/usr/local/lib/pythonVERSION/dist-packages上。您需要运行sudo pip uninstall来卸载系统范围的软件包。似乎pip freeze查找包元数据并列出任何已安装的内容,即来自pip以及virtualenvs之外的apt-get。虚拟环境中有-l选项,用于列出仅适用于该虚拟环境的软件包,但在虚拟环境中似乎也是默认情况。我想你也可以删除/usr/local/lib/pythonVERSION/dist-packages上的相关软件包,但我认为不是很方便的方法。

第四种方法

要删除通过pip安装的软件包,只需按键盘上的Ctrl + Alt + T即可打开终端。打开时,运行以下命令。

pip uninstall < package-name >

要搜索包

pip search <package you want to search for>

要确定pip安装了哪些Python软件包,请使用freeze命令,该命令将为您提供已安装软件包及其版本的列表。我建议删除所有实例,并使用sudo apt-get命令删除re-installing

sudo apt-get install python3

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1227.html,未经允许,请勿转载。