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

What is the easiest way to remove all packages installed by pip?

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

有没有一种简单快捷的方法来处理PIP?


我发现这段代码是另一种解决方案。移除库比重新构建virtualenv更优雅:

1
pip freeze | xargs pip uninstall -y

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

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


这将适用于所有Mac、Windows和Linux系统。要获取requirements.txt文件中所有PIP包的列表(注意:如果存在,这将覆盖requirements.txt,否则将创建新的一个)。

1
pip freeze > requirements.txt

现在逐个删除

1
pip uninstall -r requirements.txt

如果我们想一次全部删除,那么

1
pip uninstall -r requirements.txt -y

如果您正在处理一个已有requirements.txt文件的现有项目,并且您的环境有所不同,只需用toberemoved.txt替换上述示例中的requirements.txt。然后,一旦完成上述步骤,您就可以使用requirements.txt来更新您现在的干净环境。

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

1
pip uninstall -y -r <(pip freeze)


我想这是最新的

1
virtualenv --clear MYENV


我想把这个答案从评论部分中提出来,因为它是这个主题中最优雅的解决方案之一。这个答案的全部学分归@joeb所有。

1
pip uninstall -y -r <(pip freeze)

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

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

额外奖励:一个bash别名

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

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

然后运行:

1
pipuninstallall

Pipenv的替代方案

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

1
pipenv uninstall --all


方法1(用pip freeze)

1
pip freeze | xargs pip uninstall -y

方法2(使用pip list)

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

方法3(使用virtualenv)

1
virtualenv --clear MYENV


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

这是我经常用到的片段

1
 pip freeze --local | xargs pip uninstall -y

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

通过发布pip freeze --help了解更多有关此行为的信息


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

1
2
3
4
5
6
7
# On production:
pip freeze > reqs.txt

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


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

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

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

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

这只是一个警告,即这不是完全可靠的,因为您可能会遇到诸如"找不到文件"之类的问题,但在某些情况下它可能仍然有效。

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

然后,在获得pip uninstall -y -r unins的默示同意/事先批准的情况下,使用该文件来卸载上述软件包。

文件完成后最终被删除。


使用virtualenvwrapper函数:

1
wipeenv

参见WipeEnv文档


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

1
 pip uninstall -y (pip freeze)


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

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

-r, --requirement file

Uninstall all the packages listed in the given requirements file. This option can be used multiple times.

< /块引用>

来自PIP文档版本8.1


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

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

首先,将所有包添加到EDOCX1[0]

1
pip freeze > requirements.txt

然后删除所有

1
pip uninstall -y -r requirements.txt

这是我的命令:

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


仅使用pip的跨平台支持:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/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.

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

pew wipeenv [env]


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

1
$ brew reinstall python

或者,如果您使用的是pip3

1
$ brew reinstall python3


In Command Shell of Windows, the command pip freeze | xargs pip uninstall -y won't work. So for those of you using Windows, I've figured out an alternative way to do so.

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

  • 如果你在运行virtualenv

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

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

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

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


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

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

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

    对于基于DEB的分发:

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

    然后清除剩余的空目录:

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

    我发现最上面的答案很误导人,因为它将删除所有(大多数?)。来自您的发行版的python包,可能会给您留下一个损坏的系统。