删除pip安装的所有软件包的最简单方法是什么?

我正在尝试修复我的一个虚拟环境-我想将所有已安装的库重置回与生产相匹配的库。

有没有一种快速简便的方法来使用pip?

995852 次浏览

最快的方法是完全重新制作虚拟环境。我假设你有一个与生产匹配的requirements.txt文件,如果没有:

# On production:pip freeze > reqs.txt
# On your machine:rm $VIRTUALENV_DIRECTORYmkdir $VIRTUALENV_DIRECTORYpip install -r reqs.txt

我发现这个片段是一个替代解决方案。这是一个比重新构建虚拟环境更优雅的库删除:

pip freeze | xargs pip uninstall -y

如果您通过VCS安装了软件包,则需要排除这些行并手动删除软件包(从下面的注释中提升):

pip freeze | grep -v "^-e" | xargs pip uninstall -y

这适用于最新的。我认为这是最短和最声明的方式。

virtualenv --clear MYENV

但是为什么不直接删除并重新创建虚拟环境呢?

不变性规则。此外,很难记住其他解决方案使用的所有管道和配置。

仅使用pip的跨平台支持:

#!/usr/bin/env python
from sys import stderrfrom pip.commands.uninstall import UninstallCommandfrom pip import get_installed_distributions
pip_uninstall = UninstallCommand()options, args = pip_uninstall.parse_args([package.project_namefor package inget_installed_distributions()if not package.location.endswith('dist-packages')])
options.yes = True  # Don't confirm before uninstall# set `options.require_venv` to True for virtualenv restriction
try:print pip_uninstall.run(options, args)except OSError as e:if e.errno != 13:raise eprint >> stderr, "You lack permissions to uninstall this package.Perhaps run with sudo? Exiting."exit(13)# Plenty of other exceptions can be thrown, e.g.: `InstallationError`# handle them if you want to.

在Windows上,如果您的path配置正确,您可以使用:

pip freeze > unins && pip uninstall -y -r unins && del unins

对于类Unix系统应该是类似的情况:

pip freeze > unins && pip uninstall -y -r unins && rm unins

只是一个警告,这不是完全可靠的,因为您可能会遇到“未找到文件”等问题,但在某些情况下可能仍然有效

编辑:为了清楚起见:unins是一个任意文件,当执行此命令时将数据写入其中:pip freeze > unins

然后,它反过来编写的该文件用于卸载上述软件包,并通过pip uninstall -y -r unins暗示同意/事先批准

文件最终在完成后删除。

这是一个我知道的老问题,但我确实偶然发现了它,所以为了将来的参考,你现在可以这样做:

pip uninstall [options] <package> ...pip uninstall [options] -r <requirements file> ...

-r,--需求文件

卸载给定需求文件中列出的所有软件包。此选项可以多次使用。

pip留档版本8.1

这是对我有用的命令:

pip list | awk '{print $1}' | xargs pip uninstall -y

方法1(pip freeze

pip freeze | xargs pip uninstall -y

方法2(pip list

pip list | awk '{print $1}' | xargs pip uninstall -y

方法3(virtualenv

virtualenv --clear MYENV

使用虚拟环境包装器函数:

wipeenv

wipeenv留档

如果您正在运行virtualenv

virtualenv --clear </path/to/your/virtualenv>

例如,如果您的虚拟环境是/Users/you/.virtualenvs/projectx,那么您将运行:

virtualenv --clear /Users/you/.virtualenvs/projectx

如果您不知道您的虚拟环境位于何处,您可以从激活的虚拟环境中运行which python以获取路径

这将适用于所有Mac,Windows和Linux系统。获取requirements.txt文件中所有pip包的列表(注意:这将覆盖requirements.txt如果存在,否则将创建新的,如果你不想替换旧的requirements.txt然后在所有以下命令中给出不同的文件名requirements.txt)。

pip freeze > requirements.txt

现在一个接一个地移除

pip uninstall -r requirements.txt

如果我们想一次性移除所有

pip uninstall -r requirements.txt -y

如果您正在处理具有requirements.txt文件的现有项目,并且您的环境已经发散,只需将上述示例中的requirements.txt替换为toberemoved.txt。然后,完成上述步骤后,您可以使用requirements.txt来更新您现在干净的环境。

对于单个命令而不创建任何文件(如@joeb建议的)。

pip uninstall -y -r <(pip freeze)

在我的例子中,我不小心在macOS上使用Homebrew安装的pip在全球安装了许多软件包。恢复到默认软件包的最简单方法很简单:

$ brew reinstall python

或者,如果您使用pip3

$ brew reinstall python3

这是我卸载所有python包的最简单方法。

from pip import get_installed_distributionsfrom os import systemfor i in get_installed_distributions():system("pip3 uninstall {} -y -q".format(i.key))

其他使用pip listpip freeze必须包含#2的答案,否则它也会卸载在公共命名空间中找到的包。

这是我经常使用的片段

 pip freeze --local | xargs pip uninstall -y

参考:pip freeze --help

pip无法知道它安装了哪些软件包以及系统的包管理器安装了哪些软件包。为此,您需要做这样的事情

对于基于rpm的发行版(将python2.7替换为您安装pip的python版本):

find /usr/lib/python2.7/ |while read f; doif ! rpm -qf "$f" &> /dev/null; thenecho "$f"fidone |xargs rm -fr

对于基于deb的分布:

find /usr/lib/python2.7/ |while read f; doif ! dpkg-query -S "$f" &> /dev/null; thenecho "$f"fidone |xargs rm -fr

然后清理剩余的空目录:

find /usr/lib/python2.7 -type d -empty |xargs rm -fr

我发现上面的答案非常具有误导性,因为它会从您的发行版中删除所有(大多数?)python包,并且可能会给您留下一个破碎的系统。

在Windows的命令行外壳中,命令pip freeze | xargs pip uninstall -y将不起作用。所以对于那些使用Windows的人,我已经找到了另一种方法来做到这一点。

  1. pip的所有已安装包的名称从pip freeze命令复制到. txt文件。
  2. 然后,转到. txt文件的位置并运行命令pip uninstall -r *textfile.txt*

我想把这个答案从评论部分提升出来,因为它是线程中最优雅的解决方案之一。这个答案的全部功劳归于@陈志立

pip uninstall -y -r <(pip freeze)

这对于我在虚拟环境之外清除我的用户包文件夹的用例非常有用,上面的许多答案都无法处理。

编辑:有人知道如何使这个命令在Makefile中工作吗?

奖励:一个bash别名

为了方便起见,我将此添加到我的bash配置文件中:

alias pipuninstallall="pip uninstall -y -r <(pip freeze)"

然后运行:

pipuninstallall

Pipenv的替代品

如果您使用pipenv,您可以运行:

pipenv uninstall --all

诗歌的替代品

如果您使用诗歌,请运行:

poetry env remove --python3.9

(请注意,您需要更改那里的版本号以匹配您的Python版本。)

对于Windows用户,这是我在WindowsPowerShell上使用的

 pip uninstall -y (pip freeze)

首先,将所有包添加到requirements.txt

pip freeze > requirements.txt

然后删除所有

pip uninstall -y -r requirements.txt

如果您使用的是pew,则可以使用wipeenv命令:

pew wipeenv [env]

(添加这个作为答案,因为我没有足够的声誉来评论@蓝浆果的回答)

@BlueBerryfield的回答很有效,但如果没有要卸载的包就会失败(如果这个“全部卸载”是脚本或makefile的一部分,这可能是个问题)。当使用GNU的xargs版本时,这可以用xargs -r解决:

pip freeze --exclude-editable | xargs -r pip uninstall -y

man xargs

-r,--no-run-if-空

如果标准输入不包含任何非空,请不要运行该命令。通常,即使有,该命令也会运行一次没有输入。此选项是GNU扩展。

简单的方法跨平台在pipenv中工作也是:

pip freezepip uninstall -r requirement

由pipenv:

pipenv run pip freezepipenv run pip uninstall -r requirement

但不会更新piplock或pipfile,所以要注意

pip3 freeze --local | xargs pip3 uninstall -y

情况可能是必须多次运行此命令才能获得空的pip3 freeze --local

我通过以下方式管理它:

  1. 使用当前安装的包列表创建名为reqs.txt的需求文件
pip freeze > reqs.txt
  1. 然后卸载reqs.txt中的所有软件包
# -y means remove the package without prompting for confirmationpip uninstall -y -r reqs.txt

我喜欢这种方法,因为如果你犯了错误,你总是有一个pip需求文件可以依赖。它也是可重复的,而且是跨平台的(Windows、Linux、MacO)。

我使用--user选项卸载用户站点中安装的所有软件包。

pip3 freeze --user | xargs pip3 uninstall -y

我只是想删除项目安装的包,而不是我安装的其他包(例如neovimmypypudb,我用于本地开发,但不包含在应用程序要求中)。所以我做了:

cat requirements.txt| sed 's/=.*//g' | xargs pip uninstall -y

这对我很有效。

在Windows上,如果您的路径配置正确,您可以使用:

pip freeze > unins && pip uninstall -y -r unins && del unins

这在我的Windows系统上工作

pip freeze > packages.txt && pip uninstall -y -r packages.txt && del packages.txt

第一部分pip freeze > packages.txt创建一个文本文件,其中包含使用pip安装的包列表以及版本号

第二部分pip uninstall -y -r packages.txt删除所有安装的包,而不要求确认提示。

第三部分del packages.txt删除刚刚创建的packages.txt.

选择要从此文件夹中删除的库:

C:\用户\用户\应用程序数据\本地\程序\Python\Python 310\Lib\站点-包

为什么不rm -r .venv并重新开始?

从虚拟环境中删除所有包的最佳方法,它在windows中运行良好,但我没有签入Linuxenv。

windows:

pip freeze > unins ; pip uninstall -y -r unins ; del unins

Linux:

pip3 freeze > unins ; pip3 uninstall -y -r unins ; rm unins