卸载/删除Homebrew包,包括其所有依赖项

Ory*_*and 312 macos homebrew

我有一个Homebrew包,我希望卸载/删除所有依赖项,跳过其他包依赖的包.

例如,卸载程序包a依赖于包b&c,其中包d也取决于封装c.结果应该同时卸载a&b,跳过c.

我怎样才能做到这一点?

必须有一种方法来卸载包,而不会留下不必要的垃圾.

Ory*_*and 377

编辑:

看起来现在使用名为brew rmdepsor 的外部命令来解决问题brew rmtree.

要安装和使用,请发出以下命令:

$ brew tap beeftornado/rmtree
$ brew rmtree <package>
Run Code Online (Sandbox Code Playgroud)

有关更多信息和讨论,请参阅上面的链接.


原始答案:

目前看来,没有简单的方法来实现这一目标.

但是,我在Homebrew的GitHub页面上提出了一个问题,有人提出了一个临时解决方案,直到他们添加一个独占命令来解决这个问题.

有一个外部命令调用brew leaves它打印所有不依赖于其他包的包.

如果您执行逻辑输出,brew leaves并且brew deps <package>您可能只获得孤立依赖包的列表,您可以在之后手动卸载.结合这个,xargs你会得到你需要的东西,我想(未经测试,不要指望这个).


编辑:有人刚刚提出了一个非常类似的解决方案,使用join而不是xargs:

brew rm FORMULA
brew rm $(join <(brew leaves) <(brew deps FORMULA))
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅上述问题评论.

  • 现在可以点击第三方`brew rmtree`脚本:`brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree` (7认同)
  • 第二行给出错误:```这个命令需要一个keg参数```. (4认同)
  • 到 2020 年,这个解决方案似乎是这里提出的所有解决方案中最好的。值得一提的是,大多数情况下,在清除大量软件包后,需要执行以下操作 ```brew cleanup -s &amp;&amp; \rm -rf "$(brew --cache)"``` (3认同)
  • brew rmtree 根本不起作用! (2认同)

ser*_*ine 79

到 2020 年底,Homebrew 团队添加了一个简单的命令brew autoremove来删除所有未使用的依赖项。

首先,卸载软件包:

brew uninstall <package>

然后,删除所有未使用的依赖项:

brew autoremove

  • 如果你运行 `export HOMEBREW_AUTOREMOVE=1` 那么 `brew uninstall` 将自动运行 autoremove (10认同)
  • @stevemao 尝试询问 Homebrew 团队。 (5认同)
  • 这就像一个魅力! (3认同)
  • 我看到了无数与 mysql 一起安装的软件包。我执行了 `brew uinstall mysql`,然后执行了 `brew autoremove`,只确定了 4 个公式需要删除。这是否像我想象的那样工作和/或包是否被错误地识别为依赖项与否? (3认同)

jfm*_*cer 28

这里的目标是删除给定的包及其依赖项,而不会破坏另一个包的依赖项.我用这个命令:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | xargs brew install
Run Code Online (Sandbox Code Playgroud)

注意:编辑反映@ alphadogg的有用评论.

  • 这破坏了我的brew 配置,因为它没有重新安装其他包中使用的 deps。不要使用 (6认同)

Tim*_*mmm 22

brew rmtree 根本不起作用.从这个问题的链接我发现rmrec实际上工作.上帝知道为什么brew没有这个作为本地命令.

brew tap ggpeti/rmrec
brew rmrec pkgname
Run Code Online (Sandbox Code Playgroud)

  • `天知道为什么 brew 没有将此作为本机命令。` =&gt; 因为 brew 开发人员态度恶劣。他们甚至不允许人们打开任何问题。检查https://github.com/Homebrew/brew,它现在只有不到20个问题。这么少的数字。那是件好事儿吗?不,这很糟糕。 (6认同)
  • 警告:看来`rmrec`目前还没有很好地处理命名空间包.我正在使用"linuxbrew/xorg/xorg"中的内容并删除了除该包之外的所有内容,甚至明确命名该包无法解决它并且什么也没做. (2认同)

Cha*_*ers 12

使用此答案要求您创建并维护一个包含要在系统上安装的软件包名称的文件.如果您还没有,请使用以下命令并删除您不想继续安装的软件包名称.

brew leaves > brew_packages
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过运行以下命令来删除所有已安装但不需要的软件包以及任何不必要的依赖项

brew_clean brew_packages
Run Code Online (Sandbox Code Playgroud)

brew_clean可在此处获取:https://gist.github.com/cskeeters/10ff1295bca93808213d

此脚本获取您在brew_packages中指定的所有包及其所有依赖项,并将它们与输出进行比较brew list,最后在与用户验证此列表后删除不需要的包.

此时,如果要删除包a,只需将其从brew_packages文件中删除,然后重新运行即可brew_clean brew_packages.它会删除b,但不是c.

  • 以上评论是错误的,编辑在 5 分钟时中断。尝试`brew cleanup -s &amp;&amp; brew cask cleanup` (2认同)

vau*_*ult 11

基于@jfmercer的答案(更正需要的不仅仅是评论).

删除包的依赖项(不删除包):

brew deps [FORMULA] | xargs brew remove --ignore-dependencies
Run Code Online (Sandbox Code Playgroud)

删除包:

brew remove [FORMULA]
Run Code Online (Sandbox Code Playgroud)

重新安装缺少的库:

brew missing | cut -d: -f2 | sort | uniq | xargs brew install
Run Code Online (Sandbox Code Playgroud)

meld发现MeldMerge版本后测试卸载.


Kev*_*ies 11

将以下脚本另存为brew-purge

#!/bin/bash
#:Usage: brew purge formula
#: 
#:Removes the package and all dependancies.
#: 
#: 
PKG="$1"
if [ -z "$PKG" ];then
   brew purge --help
   exit 1
fi
brew rm $PKG
[ $? -ne 0 ] && exit 1
while brew rm $(join <(brew leaves) <(brew deps $PKG)) 2>/dev/null
  do :
done
echo Package $PKG and its dependancies have been removed.
exit 0
Run Code Online (Sandbox Code Playgroud)

现在使用以下命令安装它

sudo install brew-purge /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

现在运行它

brew purge package
Run Code Online (Sandbox Code Playgroud)

使用 gpg 的示例

$ brew purge gpg
Uninstalling /usr/local/Cellar/gnupg/2.2.13... (134 files, 11.0MB)
Uninstalling /usr/local/Cellar/adns/1.5.1... (14 files, 597.5KB)
Uninstalling /usr/local/Cellar/gnutls/3.6.6... (1,200 files, 8.9MB)
Uninstalling /usr/local/Cellar/libgcrypt/1.8.4... (21 files, 2.6MB)
Uninstalling /usr/local/Cellar/libksba/1.3.5... (14 files, 344.2KB)
Uninstalling /usr/local/Cellar/libusb/1.0.22... (29 files, 508KB)
Uninstalling /usr/local/Cellar/npth/1.6... (11 files, 71.7KB)
Uninstalling /usr/local/Cellar/pinentry/1.1.0_1... (12 files, 263.9KB)
Uninstalling /usr/local/Cellar/libassuan/2.5.3... (16 files, 444.2KB)
Uninstalling /usr/local/Cellar/libtasn1/4.13... (59 files, 436KB)
Uninstalling /usr/local/Cellar/libunistring/0.9.10... (54 files, 4.4MB)
Uninstalling /usr/local/Cellar/nettle/3.4.1... (85 files, 2MB)
Uninstalling /usr/local/Cellar/p11-kit/0.23.15... (63 files, 2.9MB)
Uninstalling /usr/local/Cellar/gmp/6.1.2_2... (18 files, 3.1MB)
Uninstalling /usr/local/Cellar/libffi/3.2.1... (16 files, 296.8KB)
Uninstalling /usr/local/Cellar/libgpg-error/1.35... (27 files, 854.8KB)
Package gpg and its dependancies have been removed.
$ 
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以为此使用 UNIX 管道

brew deps [FORMULA] | xargs brew rm
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个好的解决方案。您可以通过这种方式打破其他包的依赖关系。 (13认同)
  • 您可以在之后运行一个命令来告诉您是否删除了任何其他必需的依赖项 `brew missing`,它会告诉您需要运行什么命令才能将它们取回 (12认同)