You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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仓库根目录,删除旧钩子后重新生成:
    rm -f .git/hooks/pre-commit
    pre-commit install --install-hooks
    
    重新生成的钩子会自动绑定当前环境的homebrew Python路径,不会再指向Xcode自带Python。
  • (全局兜底配置)如果想一劳永逸解决所有仓库的同类问题,给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:18:20