如何启用虚拟环境中通过pip安装的pre-commit,替代已卸载的snap版本?
看起来你遇到的问题主要是bash缓存了旧的snap版本路径,加上之前修改git hook时配置错了,导致一直找不到正确的pre-commit。我来一步步帮你解决:
先刷新bash的命令缓存
卸载snap版本后,bash还“记着”pre-commit原来在/snap/bin里,所以即使你删了,它还是会往那找。执行这个命令让它重新搜索:hash -r pre-commit这个命令会清除bash存储的命令位置缓存,下次你输入pre-commit时,它会重新遍历你的PATH找存在的可执行文件。
确保虚拟环境的bin目录在PATH最前面
先激活你的虚拟环境:conda activate ceqa-py39然后执行
echo $PATH,看看输出里/home/betty/anaconda3/envs/ceqa-py39/bin是不是在最前面(哪怕/snap/bin现在没东西了,也要确保虚拟环境的bin路径优先级最高)。
如果没在前面,你可以临时手动调整当前shell的PATH:export PATH="/home/betty/anaconda3/envs/ceqa-py39/bin:$PATH"正常来说conda激活虚拟环境时会自动把自己的bin目录加到PATH开头,要是没生效,你可以检查下/.bashrc或者/.bash_profile里有没有手动修改PATH的配置,不小心覆盖了虚拟环境的路径。
验证pre-commit的路径是否正确
现在执行:which pre-commit正常应该输出
/home/betty/anaconda3/envs/ceqa-py39/bin/pre-commit,这说明系统已经找到pip安装的版本了。再用pre-commit --version确认下版本号,应该不是之前的1.15.2了。修复git hook的错误配置
你之前修改.git/hooks/pre-commit里的INSTALL_PYTHON变量时搞错了——这个变量应该指向Python解释器的路径,不是pre-commit的路径!
最简单的修复方法是重新安装钩子:在激活虚拟环境的状态下,进入你的项目目录,执行:pre-commit install这个命令会自动生成正确的git hook文件,覆盖你之前改坏的版本,里面的Python路径会自动指向虚拟环境的Python,不用手动改。
最后测试一下
激活虚拟环境,进入项目目录,执行:pre-commit run --all-files要是能正常运行,没有提示找不到/snap/bin/pre-commit,就说明问题解决了。
本质上就是让bash忘记旧路径,优先找虚拟环境里的版本,同时修复被你改错的git hook配置,重新生成正确的钩子文件。
内容来源于stack exchange

