911

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

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

4

30 回答 30

1310

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

pip freeze | xargs pip uninstall -y

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

pip freeze | grep -v "^-e" | xargs pip uninstall -y
于 2012-06-28T18:32:29.103 回答
620

这适用于所有 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)
于 2016-11-12T18:08:05.140 回答
148

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

virtualenv --clear MYENV

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

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

于 2012-07-26T15:15:15.953 回答
133

我想将此答案从评论部分中提升出来,因为它是该线程中最优雅的解决方案之一。这个答案的全部功劳归于@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
于 2018-03-09T18:51:49.933 回答
64

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

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

 pip freeze --local | xargs pip uninstall -y

参考:pip freeze --help

于 2017-08-03T04:49:25.607 回答
49

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

  1. 创建reqs.txt使用当前安装的包列表调用的需求文件
pip freeze > reqs.txt
  1. 然后从reqs.txt
# -y means remove the package without prompting for confirmation
pip uninstall -y -r reqs.txt

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

于 2019-10-29T11:32:57.407 回答
44

方法 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
于 2016-06-05T13:25:34.503 回答
43

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

视窗:

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

Linux:

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

如果不起作用,请更改;&&上述命令。

于 2021-05-04T06:30:40.667 回答
32

在 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

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

于 2015-12-06T14:01:59.847 回答
24

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

pip3 freeze --user | xargs pip3 uninstall -y
于 2020-04-01T07:56:51.140 回答
19

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

# On production:
pip freeze > reqs.txt

# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
于 2012-06-28T15:37:50.017 回答
18

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

pip freeze > requirements.txt

然后全部删除

pip uninstall -y -r requirements.txt 
于 2019-01-08T10:03:21.587 回答
16

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

 pip uninstall -y (pip freeze)
于 2018-03-23T12:57:37.810 回答
15

使用virtualenvwrapper函数:

wipeenv

请参阅wipeenv 文档

于 2016-09-10T04:50:48.643 回答
12

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

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

-r, --需求文件

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

来自pip 文档版本 8.1

于 2016-03-23T14:33:09.040 回答
6

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

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

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

来自man xargs

-r, --no-run-if-empty

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

于 2019-07-05T11:24:03.423 回答
6
pip3 freeze --local | xargs pip3 uninstall -y

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

于 2019-10-17T18:26:16.080 回答
2

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

于 2021-06-23T11:15:11.480 回答
2

这是我卸载所有 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))
于 2017-06-18T20:06:42.230 回答
2

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

pip freeze 
pip uninstall -r requirement

通过管道:

pipenv run pip freeze 
pipenv run pip uninstall -r requirement

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

于 2019-10-11T18:10:11.737 回答
1

仅使用跨平台支持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.
于 2015-02-21T03:45:48.953 回答
1

这是对我有用的命令:

pip list | awk '{print $1}' | xargs pip uninstall -y
于 2016-06-02T22:12:19.227 回答
1

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

pip freeze > unins && pip uninstall -y -r unins && del unins
于 2021-04-19T18:53:35.860 回答
0

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

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

这对我来说效果很好。

于 2021-01-20T23:39:58.787 回答
0

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

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

于 2021-12-11T09:05:03.380 回答
0

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

  1. 将pip已安装包的所有名称从pip freeze命令复制到.txt文件。
  2. 然后,转到.txt文件的位置并运行命令pip uninstall -r *textfile.txt*
于 2017-12-26T06:39:02.433 回答
0

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

pew wipeenv [env]

于 2019-01-11T10:57:28.873 回答
0

如果您正在运行virtualenv

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

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

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

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

于 2016-10-27T21:57:56.507 回答
-1

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

$ brew reinstall python

或者,如果您使用的是pip3

$ brew reinstall python3
于 2017-05-18T21:28:54.763 回答
-2

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 包,并且可能会让您的系统损坏。

于 2017-10-04T12:47:51.833 回答