macOS已安装pre-commit但bash提示command not found故障求助
问题根因
无论pip还是Homebrew安装后提示pre-commit: command not found,核心原因是pre-commit可执行文件所在目录没有被加入shell的PATH环境变量,之前加载~/.profile报错是因为macOS下默认shell不会优先读取该文件,且该文件默认不会自动创建。
解决步骤
第一步:确认当前使用的shell
执行命令:
echo $SHELL
- 输出
/bin/zsh:对应配置文件为~/.zshrc(macOS 10.15及以上版本默认shell) - 输出
/bin/bash:对应配置文件为~/.bash_profile(旧版macOS默认shell)
第二步:定位pre-commit可执行文件路径
根据安装方式选对应操作:
- pip安装的场景
执行命令获取用户安装根路径:
python3 -m site --user-base
输出示例:/Users/pvieira/Library/Python/3.10,在路径末尾拼接/bin就是pre-commit所在目录,即示例中对应路径为/Users/pvieira/Library/Python/3.10/bin。
- Homebrew安装的场景
执行命令获取Homebrew安装前缀:
brew --prefix
输出示例:Intel芯片Mac为/usr/local,M系列芯片Mac为/opt/homebrew,拼接/bin后就是pre-commit所在目录,即M系列芯片对应路径为/opt/homebrew/bin。
第三步:将路径加入shell配置文件
把第二步拿到的bin目录路径写入对应shell配置文件,比如你是zsh用户,拿到的pip安装路径是/Users/pvieira/Library/Python/3.10/bin,就执行:
echo 'export PATH="/Users/pvieira/Library/Python/3.10/bin:$PATH"' >> ~/.zshrc
如果是bash用户,把命令末尾的~/.zshrc替换为~/.bash_profile即可;如果是Homebrew安装,就把路径换成你拿到的brew对应的bin路径。
第四步:让配置生效
执行对应命令重载配置:
- zsh用户:
source ~/.zshrc
- bash用户:
source ~/.bash_profile
验证
执行以下命令,正常输出版本号即修复完成:
pre-commit --version
兜底方案(零路径配置)
如果手动配置路径嫌麻烦,可以直接用pipx安装,pipx会自动处理环境变量和路径问题:
- 安装pipx:
brew install pipx
- 执行路径配置命令:
pipx ensurepath
按提示重载shell配置或者重启终端。
3. 安装pre-commit:
pipx install pre-commit
安装完成后直接可以全局调用pre-commit命令,不会出现路径找不到的问题。
注意:不推荐直接用系统自带的pip全局安装pre-commit,容易出现权限冲突,优先选择
pip --user用户态安装、Homebrew安装或者pipx隔离安装的方式。
内容的提问来源于stack exchange,提问作者Pierre Vieira

