`brew list`显示了很多我没有安装的东西。为什么?如果安装的某些东西依赖于它们,我怎么知道?

问题描述 投票:0回答:1

在一台新机器上,我使用brew只安装了四个东西:

git
node
sqlite
less
。后来,当我运行
brew update
时,我被告知许多其他我没有安装的东西都是“过时的”。我运行
brew list
并得到以下结果:

brotli              less               pcre2
c-ares              libnghttp2         [email protected]
ca-certificates     libuv              readline
gdbm                mpdecimal          sqlite
gettext             ncurses            xz
git                 node
icu4c               [email protected]

这些是从哪里来的?如果它们是因为

git
node
less
需要而安装的,我如何找到?

macos homebrew package-managers
1个回答
30
投票

是的,Homebrew(又名brew)与所有包管理器一样,会自动安装依赖项。这是一个递归过程:如果依赖项本身有依赖项,brew 也会安装它们,依此类推。

brew deps

您可以使用

brew deps
命令查看安装的任何内容的依赖关系树:

> brew deps node --tree

node
├── brotli
├── c-ares
├── icu4c
├── libnghttp2
├── libuv
├── [email protected]
│   └── ca-certificates
└── [email protected]
    ├── gdbm
    ├── mpdecimal
    ├── [email protected]
    │   └── ca-certificates
    ├── readline
    ├── sqlite
    │   └── readline
    └── xz

您可以在这棵树上看到许多您在

brew list
中看到的东西。

brew uses

但是要回答您的问题,您可以使用

brew uses
命令朝相反方向操作:

> brew uses readline --installed

node            [email protected]            sqlite

--installed
标志很重要,因为如果没有它,上面的命令将列出使用readline
所有
,无论它是否安装在您的系统上。另请注意
brew uses
是如何递归的(与
brew deps
方向相反),显示直接使用
[email protected]
readline
和间接使用它的
node

brew desc

现在,如果您对这些已安装的依赖项的作用感到好奇,请使用

brew desc
命令:

> brew desc pcre2

pcre2: Perl compatible regular expressions library with a new API

brew leaves -r

如果您只想要具体安装的简短列表,

brew leaves -r
适用于大多数情况:

> brew leaves -r

git
less
node
sqlite

brew leaves
列出已安装的非依赖项(它们是上面树中的叶子),并且
-r
将列表过滤为您手动安装的那些内容。

我说“大多数情况”是因为它不包括您手动安装但不再离开的东西。当您安装另一个依赖于您最初手动安装的内容时,就会发生这种情况。例如,如果我手动安装了

readline
brew leaves -r
首先会显示,但在安装
node
sqlite
后不会显示。

对于很多人来说,“叶子”和“手动安装”是同一件事。但安装得越多,出错的可能性就越大。

brew bundle dump --file -

这是一个更难记住的命令(创建别名!),但它比

brew leaves -r
提供了可靠、完整的答案:

> brew bundle dump --file -

brew "git"
brew "less"
brew "node"
brew "sqlite"
cask "rar"

它更完整,因为与

brew leaves
不同,它将包括您手动安装的东西,即使它们不再离开。此外,它还包括水龙头和木桶。

我从 @orlp 在 Ask Different 上的回答中学到了这个技巧。

© www.soinside.com 2019 - 2024. All rights reserved.