如何检测和删除通过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
列表中出现的Python包,但未使用apt-get
安装)? - 我该如何删除它们?
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
“可编辑安装”行,在==
符号后面的所有内容( %s;==.*;;g
在vim中为%s;==.*;;g
),交换空行的新行( %s;\n; ;g
in vim)。 然后你可以卸载所有非拥有的包
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以及apt-get以外的virtualenvs。 虚拟环境中有-l
选项可列出仅适用于该虚拟环境的软件包,但在虚拟环境中似乎也是默认情况。 我想你也可以删除/usr/local/lib/pythonVERSION/dist-packages
,但我想这不是很方便的方法。
要删除通过pip安装的软件包,只需按键盘上的Ctrl + Alt + T即可打开终端。 打开时,运行以下命令。
pip uninstall < package-name >
要搜索包
pip search
要确定pip安装了哪些Python软件包,请使用freeze
命令,它将为您提供已安装软件包及其版本的列表。 我建议删除所有实例,并使用sudo apt-get
命令重新安装
sudo apt-get install python3
这与Homebrew有关。 在安装Homebrew并将其用于一些事情之前,我的Mac Air上的pyodbc没有任何问题。 我发现github上的这个post以一个对我有用的解决方案结束。
“如果你有自制软件,只需安装ODBC头:
$ brew install unixodbc
并再次运行“pip install pyodbc”。“
这100%解决了我的问题,只花了一点时间。 试一试。