推荐将新命令软链接至 /usr/local/bin 并确保其在 PATH 前置:先用 which 查找目标路径,再 sudo ln -sf 指向 /usr/local/bin;若未生效,检查 PATH 顺序并在 ~/.zshrc 中前置 export PATH="/usr/local/bin:$PATH";别名方案仅限交互式 shell。
macos 系统命令(如 python、git、curl)默认放在 /usr/bin、/bin 等受保护路径下,因 sip(系统完整性保护)限制,你不能直接修改这些目录里的文件或创建软链接。但你可以通过“让系统优先找到你自定义的版本”来实现等效替换——核心是两步:把新命令放对地方 + 让 shell 先搜那里。
把命令软链接到 /usr/local/bin(推荐)
这是最安全、最通用的做法。Homebrew 默认就用这个目录,它不受 SIP 限制,且通常已在 $PATH 前置位置。
-
先确认你要链接的目标可执行文件在哪,比如:
which python3 # 可能输出:/opt/homebrew/bin/python3(Apple Silicon)或 /usr/local/bin/python3(Intel)
-
创建软链接到
/usr/local/bin(覆盖原命令名):sudo ln -sf /opt/homebrew/bin/python3 /usr/local/bin/python
-
检查是否生效:
which python # 应该返回 /usr/local/bin/python python --version
⚠️ 注意:不要用
sudo ln -sf ... /usr/bin/python—— 这会失败或触发 SIP 警告。
确保 /usr/local/bin 在 $PATH 最前面
如果 which python 仍指向 /usr/bin/python,说明 /usr/local/bin 没有被优先搜索:
-
查看当前 PATH:
echo $PATH
-
如果
/usr/local/bin不在最前(比如出现在/usr/bin后面),编辑~/.zshrc:echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc source ~/.zshrc
替代方案:用别名(适合个人习惯,不全局生效)
如果你只希望在自己终端里 python 指向 python3,而不想影响其他工具或脚本,设别名更轻量:
-
编辑
~/.zshrc,添加:alias python=python3
-
重载配置:
source ~/.zshrc
这种方式只在交互式 shell 中生效,Shell 脚本或 GUI 应用不会识别别名。
小结关键点
- ✅ 正确路径:用
/usr/local/bin或~/bin(需加进 PATH),别碰/usr/bin - ✅ 正确方法:
ln -sf <真实路径> <目标链接>,不是复制或移动系统命令 - ✅ 必须检查:
which 命令和echo $PATH,确保顺序和结果符合预期 - ❌ 避免:关闭 SIP、挂载根目录为可写、硬改系统目录——既不必要也不安全
这样设置后,你在任何终端里敲 python,调用的就是你指定的新版本,系统原有命令依然完好无损。


















