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

时间:2012-06-28 15:36:44

标签: python django pip

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

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

29 个答案:

答案 0 :(得分:718)

我发现这个代码段作为替代解决方案。与重塑virtualenv相比,删除库更为优雅:

pip freeze | xargs pip uninstall -y

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

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

答案 1 :(得分:212)

这适用于所有Mac,Windows和Linux系统。 要获取requirements.txt文件中所有pip包的列表(注意:这将覆盖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)

答案 2 :(得分:91)

我认为这适用于最新的

virtualenv --clear MYENV

但通常我只是删除并重新创建virtualenv。

答案 3 :(得分:59)

我想从评论部分提出这个答案,因为它是该主题中最优雅的解决方案之一。这个答案完全归功于@joeb

pip uninstall -y -r <(pip freeze)

对于我在上述许多答案无法处理的virtualenv上下文之外清除用户包文件夹的用例,这对我很有用。

编辑:任何人都知道如何在Makefile中使用此命令?

Bonus:bash别名

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

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

然后运行:

pipuninstallall

替代pipenv

如果你碰巧使用pipenv,你可以运行:

pipenv uninstall --all

答案 4 :(得分:38)

方法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

答案 5 :(得分:28)

使用pip listpip freeze 的其他答案必须包含--local ,否则它还会卸载常见名称空间中的软件包。

以下是我经常使用的片段

 pip freeze --local | xargs pip uninstall -y

 pip list --local | py -x "print(x.split()[0])" | xargs pip uninstall -y

通过发出pip freeze --help

了解有关此行为的详情

答案 6 :(得分:18)

最快的方法是完全重塑virtualenv。我假设你有一个匹配生产的requirements.txt文件,如果没有:

# On production:
pip freeze > reqs.txt

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

答案 7 :(得分:16)

在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

隐含同意/事先批准,将依次写入的文件用于卸载上述软件包

文件最终会在完成后删除。

答案 8 :(得分:13)

使用virtualenvwrapper功能:

wipeenv

请参阅wipeenv documentation

答案 9 :(得分:10)

我通过以下操作对其进行了管理:

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

pip freeze > reqs.txt

然后从 reqs.txt

卸载所有软件包
pip uninstall \
   -y # remove the package with prompting for confirmation
   -r reqs.txt

我喜欢这种方法,因为您总是有一个pip要求文件,以防您出错。这也是可重复的。

答案 10 :(得分:7)

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

pip3 freeze --user | xargs pip3 uninstall -y

答案 11 :(得分:7)

对于Windows用户,这是我在 Windows PowerShell

上使用的内容
 pip uninstall -y (pip freeze)

答案 12 :(得分:5)

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

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

-r, - 要求文件

     
    

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

  

来自pip documentation版本8.1

答案 13 :(得分:4)

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

Windows 环境使用以下命令:

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

Linux 环境使用以下命令:

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

答案 14 :(得分:3)

这是我卸载所有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))

答案 15 :(得分:3)

pip3 freeze --local | xargs pip3 uninstall -y

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

答案 16 :(得分:3)

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

pip freeze > requirements.txt

然后全部删除

pip uninstall -y -r requirements.txt 

答案 17 :(得分:2)

仅使用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.

答案 18 :(得分:2)

这是对我有用的命令:

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

答案 19 :(得分:1)

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

pew wipeenv [env]

答案 20 :(得分:1)

  

在Windows的命令行管理程序中,命令pip freeze | xargs pip uninstall -y无法正常工作。所以对于那些使用Windows的人来说,我已经想出了另一种方法。

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

答案 21 :(得分:1)

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

pip freeze 
pip uninstall -r requirement

通过pipenv:

pipenv run pip freeze 
pipenv run pip uninstall -r requirement

但不会更新piplock或pipfile,因此请注意

答案 22 :(得分:1)

在我的情况下,我在macOS上使用Homebrew安装的pip意外地安装了许多软件包。恢复默认包的最简单方法是:

$ brew reinstall python

或者,如果您使用pip3

$ brew reinstall python3

答案 23 :(得分:1)

如果您正在运行virtualenv

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

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

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

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

答案 24 :(得分:1)

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

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

答案 25 :(得分:0)

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

答案 26 :(得分:0)

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

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

这对我来说效果很好。

答案 27 :(得分:0)

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

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

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

来自man xargs

  

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

     

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

答案 28 :(得分:-2)

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

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

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