Windows下pre-commit路径丢失斜杠致python.EXE未找到的解决求助
解决Windows下pre-commit钩子路径丢失斜杠的问题
我们为项目配置了pre-commit钩子,Unix系统运行正常,但在Windows上执行时出现报错:
Check copyright notices...................................................................Failed - hook id: check-copyright - exit code: 1 Executable `C:Userstore.cachepre-commitrepoq2jv0lxhpy_env-python3.9Scriptspython.EXE` not found
从报错信息可以看到,pre-commit生成的Python路径丢失了斜杠,导致无法找到可执行文件。
问题分析
脚本中的#!/usr/bin/env python并非直接问题根源——Windows系统不识别Unix风格的shebang,但pre-commit的language: python配置会自动处理虚拟环境的Python调用。真正的问题出在pre-commit旧版本的Windows路径解析bug,或者钩子配置的兼容性上。
解决方案
修改钩子配置,使用系统Python
在项目的.pre-commit-hooks.yaml中,将language: python改为language: system,同时显式指定用Python调用脚本,避免虚拟环境路径解析错误:- id: check-copyright name: Check copyright notices entry: python check_copyright.py --verbose --replace language: system files: \.(py|c|h|cpp|hpp|ld|s|S)$ require_serial: true更新pre-commit到最新版本
旧版本pre-commit在Windows路径处理上存在已知bug,执行以下命令更新:pip install --upgrade pre-commit检查缓存目录权限
确保pre-commit缓存目录(C:\Users\<你的用户名>\.cache\pre-commit)拥有读写权限,避免权限问题导致路径生成异常。使用WSL2规避Windows兼容性问题
如果上述方法无效,可在Windows上启用WSL2,在Linux子系统中运行pre-commit,完全兼容原有Unix环境的配置。
内容的提问来源于stack exchange,提问作者magicarm22
相关产品推荐
相关产品推荐

