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

有没有一种快速简单的方法来处理皮普?


当前回答

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

下面是我经常使用的代码片段

 pip freeze --local | xargs pip uninstall -y

参考:pip freeze——救命

其他回答

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

C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\网站

我想把这个答案从评论区提升出来,因为它是线程中最优雅的解决方案之一。这个答案完全归功于@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 env remove --python3.9

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

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包,可能会给你留下一个坏掉的系统。

这是对我有用的命令:

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

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