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


73

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

  • 使用较旧版本的virtualenv时,我忘了--no-site-packages在创建virtualenv时附加-之后,当我调用时pip install,Python软件包将安装到系统而不是virtualenv
  • 在正确设置的virtualenv中,我键入了sudo pip install somepackage-安装到系统而不是virtualenv的sudo

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

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

Answers:


56

Ubuntu Oneiric(我也希望有新版本)将pip软件包安装到/usr/local/lib/python2.7/dist-packages,并将apt软件包安装到/usr/lib/python2.7/dist-packages。因此,只需检查以前的目录以及sudo pip uninstall在那里找到的每个软件包。


12
我残酷地发行了sudo rm -r /usr/local/lib/python2.7。到现在为止还挺好。
Apteryx

@Apteryx,我对/usr/local/lib/python3.5和做了同样的事情,一段时间后,update-notifier-common由于缺少Python 3 six软件包,软件包升级失败。我结束了安装six使用sudo -H pip3 install six
Alexey'4

2
@Apteryx上帝,该死的你!我做了同样的事情,现在整个系统都搞砸了!因为ubuntu中的几乎所有内容都依赖python!
yukashima huksay

我注意到,我现在有一堆损坏的可执行文件/usr/local/bin/(前一阵子我刚删除/usr/local/lib/python3.5并切换到conda)。
阿列克谢

22

Pip当前忽略尝试卸载操作系统所拥有内容的卸载命令。它不会出错,就像缺少包一样。因此,现在您可以按照以下过程进行卸载:

pip freeze > dump.txt

编辑转储的文件以删除所有-e“可编辑的安装”行,在==符号后的所有内容(%s;==.*;;g在vim中),将新行替换为空格(%s;\n; ;g在vim中)。然后,您可以使用以下命令卸载所有未拥有的软件包

cat dump.txt | xargs sudo pip uninstall -y

我必须执行两次此过程,因为也安装了一些软件包~/.local/lib


1
这应该是我的公认答案
Nam G VU'Apr

3
任何人都应该希望有一种无害的单线:sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
Benoit Duffez

4
小心!这取决于您的操作系统是否附带特殊版本的pip。在archlinux上,pip愉快地卸载系统软件包。另一方面,pip关于debian jessie的抱怨和错误:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas

1
你需要须藤吗?-绝对应该是公认的答案
Jonathan

6

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但我猜不是很方便的方法。


5

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

pip uninstall < package-name >

搜索包

pip search <package you want to search for>

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

sudo apt-get install python3

如何确定pip安装了哪些Python软件包,以及apt-get安装了哪些Python软件包?pip uninstall如果我一开始就可以使用sudo pip install
david.libremone,2012年

@ d3vid pip freeze仅显示其已安装的软件包(AFAICS)。
奥利(Oli)

1
至少确切地说,@ oli pip Frozen也列出了apt安装的软件包,如此处其他答案所述。
nealmcb 2013年

0

我需要安全地清理Python软件包中的磁盘空间。尽管这完全清除了软件包,但我还需要移动Python版本,因此不需要旧软件包。我使用以下命令获取了我的所有软件包名称,跳过了前两行并抓住了第一列,并且在没有用户交互的情况下进行了卸载:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}

-2

这与自制软件有关。在安装Homebrew并将其用于一些用途之前,Mac Air上的pyodbc一直没有问题。我在github上发现了这个线程,最终找到了有用的解决方案。

“如果您有自制软件,只需安装ODBC标头:

$ brew install unixodbc

然后再次运行“ pip install pyodbc”。

这100%为我解决了问题,只花了一点时间。试一试。


也许您需要将其发布在Ask Different?apple.stackexchange.com
david.libremone
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.