macOS High Sierra下Python安装故障排查:python命令执行异常
问题诊断与解决方案
首先咱们拆解下你遇到的矛盾现象:为什么which python显示的是有效路径,但直接执行python却报错找不到另一个路径?
核心原因
- PATH里存在无效的优先目录:从你的
echo $PATH输出能看到,/usr/local/opt/python2/libexec/bin这个目录排在/usr/local/bin前面,但这个目录根本不存在(你用ls验证过)。shell执行python时会按PATH顺序依次查找,先尝试访问这个不存在的目录,直接抛出找不到文件的错误。 - bash命令缓存的残留:bash会缓存你之前执行过的命令路径(通过
hash机制),你之前brew安装的python可能曾经在/usr/local/opt/python2/libexec/bin目录下有可执行文件,卸载后缓存没清空,导致shell还是尝试访问这个旧路径,而非重新遍历PATH找有效的/usr/local/bin/python。
而which是独立工具,它会忽略PATH里不存在的目录,直接找到第一个存在的可执行文件,所以能正确返回/usr/local/bin/python——这就是两者结果不一致的根源。
修复步骤
1. 移除PATH中的无效目录
- 打开你的bash配置文件(通常是
~/.bash_profile,找不到就看~/.bashrc),找到类似下面的行:
删除或者用export PATH="/usr/local/opt/python2/libexec/bin:$PATH"#注释掉这一行。 - 保存文件后,执行命令刷新当前shell配置:
source ~/.bash_profile
2. 清空bash的命令缓存
执行命令清除bash缓存的旧命令路径:
hash -r
3. 验证修复效果
现在再执行python --version,应该会正常输出Python 2.7.15,同时which python依然返回/usr/local/bin/python,两者结果就一致了。
额外清理建议
根据brew doctor的提示,你有几个损坏的符号链接,可以执行下面的命令清理,避免后续brew相关问题:
brew prune
内容的提问来源于stack exchange,提问作者jamiet




