ChatGPT解决这个技术问题 Extra ChatGPT

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

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

有没有一种快速简便的方法可以用 pip 做到这一点?

@patelshahrukh 卸载 python 不会删除 pip 包。请避免这样做,因为它很可能不会按照您认为的方式工作,并且取决于您再次安装 python 的方式,可能会使您的机器处于不稳定状态,这需要更多的工作来修复。
这可能有助于以开发模式或可编辑模式安装的软件包:stackoverflow.com/questions/17346619/…

b
blueberryfields

我发现这个片段是一种替代解决方案。与重新制作 virtualenv 相比,删除库更优雅:

pip freeze | xargs pip uninstall -y

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

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

我发现这是一个很好的解决方案,纯粹是因为它不会完全删除虚拟环境 - 我可能已经对例如 postactivate 进行了更改,这些更改将保留。
运行后,我意识到它删除了 setuptools 包。我按照此处的说明解决了问题:stackoverflow.com/questions/7446187/…
您也可以使用 pip freeze --exclude-editable | xargs pip uninstall -y 忽略 VCS 包而不使用 grep 模式
ERROR: Invalid requirement: '@' 我有从我的 gitlab 安装的软件包。
pip freeze 列出所有软件包,包括安装在操作系统中的软件包。如果没有 root 权限,用户将无法(并且可能不希望)删除它们。 pip freeze --user 为我工作。
H
Harshad Kavathiya

这适用于所有 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)

可能值得一提的是,如果他们不知道,您将强制覆盖他们的 requirements.txt 文件。 :)
此外,如果要删除所有包,附加“-y”即可。示例:pip uninstall -r requirements.txt -y
您可以使用 pip uninstall -y -r <(pip freeze) 一次性完成所有操作。
@joeb 是的,我们也可以这样做。
@HarshadKavathiya,您可以使用另一个文件来存储 pip 冻结,例如“current.txt”,因此 requirements.txt 可以保持不变欢呼
R
Robert Moskal

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

virtualenv --clear MYENV

但是为什么不直接删除并重新创建 virtualenv 呢?

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


这实际上与运行 wipeenv 相同吗? virtualenvwrapper.readthedocs.org/en/latest/…
实际上 — 似乎(从我刚刚遇到的情况来看)而 wipeenv 在环境中会引发错误并且如果在 pip install -e 开发构建的上下文中使用不会删除任何内容,但尝试使用 virtualenv --clear MYENV 不会t 抛出错误并且不删除您之前在环境中安装的任何包。至少在 OSX 上是这样。有关详细信息,请参阅 bitbucket.org/dhellmann/virtualenvwrapper/issues/211/…
wipeenv 是 virtualenvwrapper 提供的别名,所以不是每个人都有。
好吧,这是一种肮脏的把戏,但就像魔术一样。我宁愿每个人都使用 pip uninstall -r requirements.txt -y。这是一个很好的清理。
T
Taylor D. Edmiston

我想将此答案从评论部分中提升出来,因为它是该线程中最优雅的解决方案之一。此答案的全部功劳归于 @joeb

pip uninstall -y -r <(pip freeze)

这对我来说非常适合在 virtualenv 上下文之外清除我的用户包文件夹的用例,而上述许多答案都无法处理。

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

奖励:一个 bash 别名

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

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

然后运行:

pipuninstallall

Pipenv 的替代品

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

pipenv uninstall --all

诗歌的替代品

如果您使用 Poetry,请运行:

poetry env remove --python3.9

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


我喜欢它,但它在 null 情况下不起作用(如果没有安装任何软件包,pip freeze 不会产生任何输出,然后 pip uninstall 会抱怨,很遗憾)。
嗯不错的收获。也许它可以被包装到一个检查 pip freeze 输出是否为非空的 bash 函数中。我没有看到一个很好的方法来实现这一点,同时保持命令是一个很好的短单线。
make 默认使用 sh,但替换语法 <(...) 是一种 bashism。因此,您可以使用 bash -c "...",也可以通过执行 pip freeze | pip uninstall -r /dev/stdin
不适用于 Azure Notebooks:ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
@SeaDude 这是一个可能有帮助的解决方法 - stackoverflow.com/questions/49915951/cannot-uninstall-chardet。如果这不起作用,那么这种方法将是我的下一个最佳猜测 - github.com/vlachoudis/bCNC/issues/1141。请注意,提到的包是不同的,但我相信潜在的问题可能是相似的。
n
nehem

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

所以这是我经常使用的片段

 pip freeze --local | xargs pip uninstall -y

参考:pip freeze --help


这一直有效,直到它遇到产生此错误的包:ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.。然后我无法卸载更多模块。
K
K-Dawg

我通过执行以下操作来管理它:

使用当前安装的包列表创建名为 reqs.txt 的需求文件

pip freeze > reqs.txt

然后从 reqs.txt 卸载所有包

# -y means remove the package without prompting for confirmation
pip uninstall -y -r reqs.txt

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


S
Sathiamoorthy

从虚拟环境中删除所有包的最佳方法:

视窗:

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

Linux:

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

如果不起作用,请将上述命令中的 && 更改为 ;


窗户:no such option: -y
@variable,对我来说,windows 命令正在工作
b
blueberryfields

方法1(点冻结)

pip freeze | xargs pip uninstall -y

方法2(带点列表)

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

方法3(使用virtualenv)

virtualenv --clear MYENV

sudo 不是必需的,如果不仔细考虑使用它很可能很危险,因为它会影响全局机器设置。例如,请参阅此答案:stackoverflow.com/questions/15028648/…
方法 2 (pip list) 非常有效,直到您让 pip 不小心自行卸载 -_-
方法 2 在我的情况下不起作用,因为列表中有一个需要忽略的标题。这个有效:pip list | awk '{print $1}' | grep -vE "^pip$|^Package$|^---" | xargs pip uninstall -y
R
Richard Kenneth Niescior

在 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 默示同意/事先批准的情况下,它依次编写的该文件用于卸载上述软件包

该文件最终在完成后被删除。


K
Kalanos

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

pip3 freeze --user | xargs pip3 uninstall -y

我相信这个答案并没有添加太多新信息,我宁愿建议改进另一个已经存在的类似答案,例如这个:stackoverflow.com/a/45475070/11138259
如果您使用的是 virtualenv 并获得 ERROR: You must give at least one requirement to uninstall,请删除 --user 部分
pip3 freeze | xargs pip3 uninstall -y ==> ` PermissionError: [Errno 13] Permission denied: '/usr/local/bin/ap' -> '/tmp/pip-uninstall-q9gzbj0d/ap'`
@SL5net。您可能需要以超级用户身份运行它。类似 sudo sh -c 'pip3 freeze | xargs pip3 uninstall -y' (添加的 sh -c 和引号是因为 pipe 不能很好地与 sudo 配合使用)或者您可以以 root 身份执行命令,但我不建议这样做,因为它不是一个好习惯。在根目录下进行炮击很容易意外地破坏您的系统,相信我,在这里谈论的痛苦经历。
s
shafik

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

pip freeze > requirements.txt

然后全部删除

pip uninstall -y -r requirements.txt 

d
dwlz

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

# On production:
pip freeze > reqs.txt

# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt

这是否甚至可以处理存在可编辑安装(基本上是 setuptools 开发模式安装)创建本地 .egg-info 文件然后干扰安装/卸载过程的其余部分的情况?由于它是一组文件,它似乎不知道如何处理它们的存在,而不是卸载任何东西,它使 MYENV 下的本地目录结构完成:` > MYENV/bin/python3.4 中的新 python 可执行文件 > 也在 MYENV/bin/python 中创建可执行文件 > 安装 setuptools、pip、wheel...完成。` 但是 MYENV 没有重置环境!
b
benwrk

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

 pip uninstall -y (pip freeze)

G
GabLeRoux

使用 virtualenvwrapper 函数:

wipeenv

请参阅wipeenv documentation


如果您使用的是 virtualenvwrapper,请输入 wipeenv
C
Craicerjack

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

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

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

pip documentation 版本 8.1


T
Thibaut Dubernet

(将此添加为答案,因为我没有足够的声誉来评论@blueberryfields 的答案)

@blueberryfields 的答案效果很好,但是如果没有要卸载的软件包,则会失败(如果此“全部卸载”是脚本或 makefile 的一部分,则可能会出现问题)。使用 GNU 版本的 xargs 时,可以使用 xargs -r 解决此问题:

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

来自 man xargs

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


o
obotezat
pip3 freeze --local | xargs pip3 uninstall -y

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


H
Huey

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

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

M
Mahdi Hamzeh

跨平台和在 pipenv 中工作的简单健壮方式是:

pip freeze 
pip uninstall -r requirement

通过管道:

pipenv run pip freeze 
pipenv run pip uninstall -r requirement

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


S
Samuel Marks

仅使用 pip 的跨平台支持:

#!/usr/bin/env python

from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions

pip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
    package.project_name
    for package in
    get_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 e
    print >> 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.

B
Brian Tompsett - 汤莱恩

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

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

S
SohailAQ

这适用于我的 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。


F
Fei Xie

这是对我有用的命令:

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

p
punkrockpolly

如果您正在运行 virtualenv

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

例如,如果您的 virtualenv 是 /Users/you/.virtualenvs/projectx,那么您将运行:

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

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


S
Sushant Chaudhary

在 Windows 的 Command Shell 中,命令 pip freeze | xargs pip uninstall -y 不起作用。因此,对于那些使用 Windows 的人,我已经找到了一种替代方法。

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


M
Mohammad Banisaeid

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

pew wipeenv [env]


v
verboze

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

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

这对我来说效果很好。


e
erfoon maraghi

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

C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\site-packages


尽管这确实删除了所有包(以及更多包),但它并没有像问题那样使用 pip 这样做。
R
Radon Rosborough

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

$ brew reinstall python

或者,如果您使用 pip3

$ brew reinstall python3

例如,如果您使用 pyenv,此答案对环境的假设过多,并且不能直接解决问题。
@Mark 好吧,如果您使用的是 pyenv,那么您需要做一些不同的事情。在您不是的常见情况下,我相信这是最简单且最不麻烦的解决方案。请注意,此条件在答案的开头明确说明。
OP询问了virtualenvs。他没有具体提到使用 Mac 或 brew 安装 Python。因此,您不能假设使用了操作系统或 brew - 这个答案不会解决所有条件。如果您专注于使用诸如 pip 之类的工具来解决环境问题 - 您将解决您所处环境的上下文。希望这是有道理的。
@Mark 我理解你的立场。我们可以同意不同意。我只是想帮助那些点击标记为“删除 pip 安装的所有软件包的最简单方法是什么?”的链接的人。当他们真的想删除 pip 全局安装的所有软件包时。
同意@RadonRosborough,链接标题代表了我为何来到这里,即使 OP 实际上并没有问同样的问题。
g
glenda

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

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

find /usr/lib/python2.7/ |while read f; do
  if ! rpm -qf "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

对于基于 deb 的分发:

find /usr/lib/python2.7/ |while read f; do
  if ! dpkg-query -S "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

然后清理剩下的空目录:

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

我发现最佳答案非常具有误导性,因为它会从您的发行版中删除所有(大多数?)python 包,并且可能会让您的系统损坏。


恕我直言,这似乎是可比的。为什么不 dpkg-query -S '/usr/lib/python2.7/*',提取名称,然后 dpkg-query -L 每个名称转储相关文件?它已经准备好了清单。我的主要反对意见是,不是针对安装在任何地方的软件包,而是通过 pip 安装的软件包,而是针对除您期望的管理器之外的任何其他地方安装的软件包,并且定位在 pip 通常不应该接触的位置。 pip list -l 列出了它在本地安装的软件包,有些甚至会pip install --target=...。删除所有当前空的目录也会咬你!