Files
Qiniu/technical/mac-dev-env-setup/homebrew-intro.md
T

222 lines
6.7 KiB
Markdown
Raw Normal View History

2026-07-01 23:09:21 +08:00
---
tags: [homebrew, macos, package-manager]
create time: 2026-07-01 00:00
---
# Homebrew — macOS 包管理器
## 概述
Homebrew(简称 brew)是 macOS 上最流行的开源包管理工具,弥补了 macOS 缺乏官方包管理器的空白。它通过命令行安装、更新和卸载 Unix 工具和桌面应用,是 Mac 开发环境搭建的第一步。
## 核心概念
### 目录结构
```
/opt/homebrew/ # ARM Mac 安装根目录(M1/M2/M3/M4)
├── bin/ # 可执行文件(brew 本身在此)
├── Cellar/ # 已安装包的实际存放位置(版本化目录)
├── Cask/ # GUI 应用(--cask)的安装元数据
├── etc/ # 配置文件
├── include/ # C/C++ 头文件
├── lib/ # 动态链接库
├── opt/ # 当前活跃版本的 symlink 目标
├── share/ # 共享资源(man pages, completions 等)
└── var/ # 运行时数据
/usr/local/ # Intel Mac 安装根目录
```
> [!info] Cellar vs Opt
> `Cellar/<formula>/<version>` 存储每个版本的实际文件;`opt/<formula>` 是一个 symlink,始终指向当前最新版本。这就是 `brew upgrade` 后不需要重新配置 PATH 的原因。
### Formula vs Cask
| 类型 | 用途 | 示例 | 安装路径 |
|------|------|------|----------|
| **Formula** | CLI 工具和库 | `git`, `go`, `python@3.12` | `/opt/homebrew/Cellar/...` |
| **Cask** | GUI 桌面应用 | `visual-studio-code`, `iterm2` | `/Applications/` |
```bash
# Formula 安装
brew install git
# Cask 安装(注意 --cask 或直接用 install,brew v4+ 自动识别)
brew install --cask visual-studio-code
```
### Tap —— 第三方仓库
默认只包含 Homebrew 官方的 core tap(formula + cask)。社区维护的第三方仓库称为 **tap**。
```bash
# 查看已添加的 taps
brew taps
# 添加社区 tap
brew tap homebrew/cask-fonts # 字体 cask
brew tap darwinports # 假设的第三方 tap
# 从 tap 安装
brew install darwinports/my-tool
```
> [!tip] 常见社区 tap
> - `homebrew/cask-fonts` — 大量字体应用
> - `homebrew/core` 和 `homebrew/cask` 默认已添加
> - 添加前用 `brew search <name>` 确认是否在官方源中,避免不必要的 tap
## 代码示例
### 安装与初始化
```bash
# 一键安装脚本
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# ARM Mac:将 brew 加入 shell profile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
# Intel Mac
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
```
`brew shellenv` 会输出需要注入到 shell 中的环境变量(PATH、MANPATH、CGO_CFLAGS 等),`eval` 将其应用到当前环境。
### 常用工作流
```bash
# 搜索包(formula + cask)
brew search neovim
# 查看详情(版本、依赖、安装数)
brew info neovim
# 安装
brew install neovim
# 指定版本(需先用 brew versions 或查 formula history)
brew install neovim@0.9
# 升级
brew upgrade # 升级所有可升级的包
brew upgrade neovim # 只升级某个包
# 清理磁盘空间
brew cleanup # 删除旧版本缓存
brew cleanup --prune # 同时清理孤立 symlink
# 诊断
brew doctor # 检查环境问题
brew config # 查看当前配置信息
```
### 管理依赖
```bash
# 查看某包的依赖树
brew deps --tree git
# 查看哪些包依赖某包(反向查询)
brew depends --tag python@3.12
# 列出已安装的包
brew list
# 列出可卸载的孤立依赖(无人引用)
brew autoremove
```
> [!warning] autoremove 不会删除你显式安装的包
> 只有那些因满足其他包的依赖而被自动安装、且当前不再被任何包需要的依赖才会被移除。
### 源码编译自定义参数
```bash
# 查看可用选项
brew options curl
# 安装时启用特定 flag
brew install curl --with-openssl
# 或者编辑 formula 后再安装(bottle 会被跳过)
brew edit curl # 打开本地 formula 副本
brew install curl
```
`brew edit <formula>` 会在本地创建一个公式副本,适合临时修改编译参数,但升级时会提示冲突。
## 常见陷阱与最佳实践
### 1. PATH 优先级问题
macOS 系统自带的工具(如 `/usr/bin/python3`)可能比 brew 安装的更早出现在 PATH 中。确保 brew 路径在 `/usr/local/bin` 或 `/opt/homebrew/bin` 之前:
```bash
echo $PATH
# 期望顺序:/opt/homebrew/bin:...(在 /usr/bin 之前)
```
> [!tip] 验证方法
> 运行 `which git` 应输出 `/opt/homebrew/bin/git`(ARM)或 `/usr/local/bin/git`(Intel),而非 `/usr/bin/git`。
### 2. Permission Denied 不要用 sudo
```bash
# ❌ 错误做法
sudo brew install git # 会破坏 ownership,导致后续操作全部报错
# ✅ 正确做法
chown -R $(whoami) $(brew --prefix)/* # 修复权限后重试
```
brew 设计的初衷就是用户级别使用,使用 `sudo` 会改变 `/opt/homebrew` 下文件的 owner,引发连锁问题。如果误用了 `sudo brew`,用上面的命令修复即可。
### 3. 大版本升级后的迁移
```bash
# Homebrew v4 (2023+) 要求先运行迁移命令
brew update
brew doctor # 检查是否需要迁移
brew bump-formula-pr --arch ... # 通常无需手动干预
```
### 4. 离线环境 / 国内网络优化
中国大陆用户安装和下载可能较慢,可以通过设置镜像源加速:
```bash
# Git 仓库镜像(可选,通常无需设置,brew 官方源在国内访问正常)
# 替换为清华大学镜像
git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
# pip / npm 等有专门的镜像配置方式,这里不展开
```
### 5. Bottle vs Build from Source
brew 默认优先下载预编译的 **bottle**(二进制包),速度远快于从源码编译。某些特殊架构或定制需求时才需要从源码构建:
```bash
# 强制从源码编译(跳过 bottle)
brew install --build-from-source curl
```
### 6. 公式维护约定
brew formula 采用 "one version at a time" 策略——`brew install git` 只装最新稳定版,不保留历史版本。如果需要多版本共存(类似 nvm for Node),推荐:
- Go → 用 `gvm` 或通过 golang.org/dl 官网安装
- Python → `pyenv` 配合 `brew install pyenv`
- Node.js → `nvm`(已在本环境的 Node 章节覆盖)
## 延伸阅读
- [Homebrew 官方文档](https://docs.brew.sh)
- [[projects/mac-dev-env-setup]] — macOS 开发环境总指南
- [[technical/go]] — Go 语言环境配置
- [[technical/nodejs]] — Node.js 与 pnpm 配置