问题描述
我使用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