问题描述
我使用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
要确定pip安装了哪些Python软件包,请使用freeze命令,该命令将为您提供已安装软件包及其版本的列表。我建议删除所有实例,并使用sudo apt-get命令删除re-installing
sudo apt-get install python3
参考资料