必须调用brew deps --installed --tree生成全量依赖树,它递归展开所有已安装formula的运行时依赖,过滤构建/可选依赖,以缩进层级呈现真实拓扑结构,顶层为手动安装包,下层为实际参与链接的依赖项。

要一次性看清 macOS 上所有已安装 Homebrew 软件包的完整依赖结构,避免手动逐个查包、漏掉隐式依赖或误判“孤儿包”,必须调用 Homebrew 原生命令生成全局依赖图谱,而非只看单个 formula 的树形输出。
用 brew deps --installed --tree 生成全量依赖树
在终端中直接执行:
brew deps --installed --tree
这条命令会递归展开当前所有已安装 formula 的依赖关系,并自动过滤掉仅用于构建(build-only)或可选(optional)的依赖,只保留真正被安装进系统、参与运行时链接的依赖项。输出结果以缩进层级呈现,顶层是手动安装的包(leaves),下层是它们各自拉入的依赖,同一层级的依赖按字母序排列——这是唯一能反映真实运行时依赖拓扑的方式。
注意:该命令不包含 cask(图形应用),如需合并查看,请先运行 brew tap homebrew/cask-versions && brew tap homebrew/cask-fonts 等常用 tap,再配合 brew list --cask 查补,但依赖树本身仍仅限 formula。
用 JSON 接口获取结构化依赖数据(推荐给自动化或深度分析)
方法一:导出全部包的依赖元数据
brew info --json=v2 --all > all-packages.json
这会生成一个包含所有已知 formula(含未安装的)的完整 JSON 数据集,其中每个包对象都带有 dependencies、build_dependencies、installed 等字段。关键在于 installed 字段为 true 的条目,才代表当前实际存在于本地的包及其精确依赖列表。
方法二:只提取已安装包的精简依赖图
brew list --formula | xargs -I {} brew deps --installed --json {} 2>/dev/null | jq -s 'reduce .[] as $item ({}; . += $item)' > installed-deps-graph.json
这一步需要系统已安装 【jq】 工具。它逐个查询每个已安装 formula 的 --installed 依赖并转为 JSON,再用 jq 合并为一张扁平化的键值映射图:键是包名,值是其直接依赖数组。相比 --tree 文本输出,这种格式可直接导入 Python 或前端工具做可视化渲染,也便于 grep 或脚本筛选。
快速定位冗余/冲突依赖的三步验证法
第一步:找出所有重复出现的基础库
brew deps --installed --tree | grep -E "^(openssl|readline|sqlite|icu4c|libxml2)" | sort | uniq -c | sort -nr
第二步:对高频率库反向查依赖者
brew deps --reverse openssl@3
第三步:确认这些依赖者是否真的需要该版本
brew info openssl@3 | grep "Required by"
这三步连起来,就能判断 openssl@3 是被 python@3.12、node@20 还是某个孤立旧包硬性绑定的。如果输出为空或仅指向已卸载包,则说明它极可能是残留冗余项——【此时不要直接删】,应先用 brew autoremove --dry-run 预览影响范围。

















