根本原因是path未正确配置或顺序错误:必须将homebrew安装路径(如/opt/homebrew/bin)前置添加到~/.zshrc中并source,确保which llvm-config返回新版路径,且排除alias/函数干扰及vs code环境继承问题。

LLVM 安装后终端仍显示旧版本,根本不是 LLVM 没装好,而是 shell 找不到你新装的 llvm-config —— 它压根没进 $PATH,或者进了但顺序太靠后,被系统自带的旧版(如 Xcode 自带的)盖过去了。
which llvm-config 返回 /usr/bin/llvm-config 就说明路径没生效
macOS 系统自带的 llvm-config 通常在 /usr/bin/(Xcode Command Line Tools 提供),受 SIP 保护,不可覆盖。Homebrew 安装的新版默认在 /opt/homebrew/bin/llvm-config(Apple Silicon)或 /usr/local/bin/llvm-config(Intel)。shell 查找命令严格按 $PATH 从左到右匹配,只要 /usr/bin 出现在新版路径前面,就永远命中旧版。
- 运行
echo $PATH | tr ':' '\n' | nl,确认/opt/homebrew/bin(或对应路径)是否排在第 1~3 行 - 如果该路径根本没出现,说明你漏加了
export PATH="/opt/homebrew/bin:$PATH"到~/.zshrc - 如果它出现在第 8 行或更后,需前置:把
export PATH="/opt/homebrew/bin:$PATH"放到~/.zshrc最开头,并执行source ~/.zshrc - 别用
brew --prefix动态拼路径——M1/M2/M3 是/opt/homebrew,Intel 是/usr/local,混写会失效
llvm-config --version 显示旧版但实际路径是对的?检查 alias 或函数干扰
有些环境会用 alias llvm-config='/usr/bin/llvm-config' 或定义同名 shell 函数,直接劫持命令。这类干扰在 VS Code 终端、iTerm2 多 tab 场景下尤其常见。
- 运行
type llvm-config:若输出llvm-config is aliased to ...或llvm-config is a function,就确认是 alias/函数覆盖 - 临时绕过:用完整路径执行,例如
/opt/homebrew/bin/llvm-config --version - 永久清除:在
~/.zshrc中搜索alias llvm-config或function llvm-config并删掉 - VS Code 用户额外检查设置:
"terminal.integrated.inheritEnv": true必须开启,否则终端不继承 shell 环境
numba 安装报 FileNotFoundError: llvm-config,其实是 pip 没读到 PATH
pip install numba 内部会调用 llvm-config --version 获取编译参数。如果此时 llvm-config 不在当前环境的 $PATH 中,就会直接报 FileNotFoundError,而不是版本不匹配。
- 先确保终端里能直接运行
llvm-config --version且输出是你期望的版本 - 如果可以,但
pip install numba仍失败,说明 pip 启动的子进程没继承 PATH —— 常见于某些 IDE 终端或虚拟环境未激活 - 手动指定路径安装:
pip install numba --global-option="--with-llvmconfig=/opt/homebrew/bin/llvm-config" - 更稳妥的做法:升级 pip + 使用完整路径调用,避免依赖环境变量解析
真正卡住人的地方,往往不是没装 LLVM,而是 shell 进程压根没加载你写的 PATH 配置,或者加载了但被 alias、IDE 缓存、SIP 保护路径优先级搅乱了。每次改完 ~/.zshrc,务必关掉所有终端窗口再新开一个,然后立刻跑 which llvm-config 和 llvm-config --version 交叉验证——少一步都可能白忙活。











