终端执行python3仍显示旧版本,根本原因是PATH环境变量中旧版路径(如/usr/bin)优先级高于新版路径(如/opt/homebrew/bin),导致shell按从左到右顺序匹配时始终命中系统自带的受SIP保护的python3。

终端执行 python3 --version 仍显示旧版本(比如 3.9.6 或 3.10.20),不是安装失败,而是 shell 没有优先找到你新装的 python3 可执行文件——路径顺序错了。
which python3 返回 /usr/bin/python3 就说明问题出在 PATH 顺序
macOS 系统自带的 python3 在 /usr/bin/python3,受 SIP 保护不可覆盖;Homebrew 安装的新版默认在 /opt/homebrew/bin/python3(Apple Silicon)或 /usr/local/bin/python3(Intel)。shell 查找命令时严格按 $PATH 从左到右匹配,只要 /usr/bin 出现在 /opt/homebrew/bin 前面,就永远命中系统旧版。
- 运行
echo $PATH | tr ':' '\n' | nl查看各目录序号,确认/opt/homebrew/bin是否排在第 1~3 位 - 若没出现该路径,说明根本没加进
PATH;若出现在靠后位置(比如第 8 行),需前置 - 别依赖
brew --prefix直接拼路径:M1/M2/M3 芯片下是/opt/homebrew,Intel 是/usr/local,混用会失效
~/.zshrc 里 export PATH=... 没生效的常见原因
macOS 默认 shell 是 zsh,但很多人改错配置文件,或者改了不重载。最常踩的坑是:
- 误改了
~/.bash_profile或~/.bashrc(zsh 下完全不读) - 写了
export PATH="/opt/homebrew/bin:$PATH"却忘了source ~/.zshrc - 终端已打开很久,没重启也没重载,shell 还缓存着旧
PATH - VS Code 内置终端没继承新环境:检查设置里
"terminal.integrated.inheritEnv": true
pyenv 用户必须额外跑 pyenv global 和 pyenv init
如果你用的是 pyenv 装的 3.11,which python3 会返回 ~/.pyenv/shims/python3,但这个路径本身不包含可执行文件——它靠 pyenv 的 shim 机制动态代理。漏掉任一环节都会 fallback 到系统版:
立即学习“Python免费学习笔记(深入)”;
- 确认已运行
pyenv install 3.11.x且成功 - 必须执行
pyenv global 3.11.x(否则pyenv version显示system) -
pyenv init -输出的内容要完整写入~/.zshrc,并source生效 - 验证:
pyenv which python3应输出~/.pyenv/versions/3.11.x/bin/python3
真正卡住人的地方,往往不是不会装 Python,而是分不清「安装完成」和「shell 已接管」是两件事。每次改完配置,务必用 which python3 和 python3 --version 交叉验证,缺一不可。


















