Mac OS执行git commit时调用Xcode内置Python而非PATH版本致pre_commit报错
问题根因
两个直接原因导致Git调用Xcode自带Python:
- 交互式终端的PATH配置不会被Git钩子继承:你在终端里执行
which python3拿到homebrew路径,是因为终端启动时加载了.zshrc/.bashrc里的自定义PATH优先级;但Git触发pre-commit等钩子时跑的是非交互式Shell,不会加载用户Shell配置文件,默认用系统基础PATH,会优先找到Xcode Command Line Tools自带的Python解释器。 - 旧的pre-commit钩子硬编码了错误的解释器路径:如果你之前某次执行
pre-commit install时,当前环境默认调用的是Xcode自带Python,生成的.git/hooks/pre-commit脚本首行shebang会直接写死Xcode的Python路径,后续不管你终端怎么切Python版本,跑钩子的时候都会直接调用这个写死的解释器,自然找不到你装在homebrew Python里的pre_commit模块。
修复步骤
按顺序操作即可:
- 先确认当前终端用的是homebrew版pre-commit,执行:
正常返回应为which pre-commit/opt/homebrew/bin/pre-commit,如果返回其他路径,先跑brew install pre-commit装homebrew源的版本,避免多Python环境冲突。 - 进入出问题的Git仓库根目录,删除旧钩子后重新生成:
重新生成的钩子会自动绑定当前环境的homebrew Python路径,不会再指向Xcode自带Python。rm -f .git/hooks/pre-commit pre-commit install --install-hooks - (全局兜底配置)如果想一劳永逸解决所有仓库的同类问题,给Git加全局环境变量配置,强制Git执行操作时优先搜索homebrew路径:
git config --global core.env "PATH=/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"
验证
修改仓库任意文件后执行git commit,不再弹出No module named pre_commit报错即修复完成。
内容的提问来源于stack exchange,提问作者thomas
相关产品推荐
相关产品推荐

