如何检测和删除通过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%解决了我的问题,只花了一点时间。 试一试。