参考来源:https://stackoverflow.com/questions/68794749/unable-to-run-pre-commit-in-anaconda-environment
问题
与电脑两地隔离了半个月,今天开机commit的时候忽然弹出了下面的错误(自己图忘存了,图源置顶链接),pre-commit没法用了。
它说没有匹配版本的ruamel.yaml这个包,但是检查当前虚拟环境中有这个包,而且保险起见我又重新装了一下这个包。
再次尝试依旧不行,看起来是SSL无法连接到那些URL之类的,pre-commit的环境不能自己下载这个包了。又检查了SSL的版本、网络连接、切换其他的虚拟环境、更新pre-commit等等等等,都没有结果。
暂时解决
最后发现置顶连接的中有人提到了同样的问题,最下面一个回答让人发现可能解决的方案。
Install and configure pre-commit in your base conda environment instead of your project's conda environment.
他的意思是说pre-commit使用的环境是(base)这个conda环境,不是我现在的这个虚拟环境,所以安不上可能不是我现在环境的问题,而是base环境的问题。于是我切换到了base环境(依旧无法使用pre-commit)然后更新了一波conda以及所有的包。
conda update conda
conda upgrade --all
这时候在base环境下使用pre-commit run --all-files
成功运行了,如置顶链接的最后一个回答的两个结果。在base环境下安装好pre-commit的环境的后,此时切回自己的环境也能成功使用pre-commit了。
疑惑
虽然跑起来了,但是其中还是发现一点问题让我没有想通。
- 之前所有的环境都是可以使用了,忽然就不行了,不知道为啥(莫非啥版本之类的变了、什么东西更新了)。
- 当base环境的pre-commit能使用后,我删除了cache中的pre-commit,尝试在其他虚拟环境(非上面那个环境)重新run来构建pre-commit的环境。发现之前所有环境都不能用,现在在其他环境也可以和base环境一样使用了(难道是更新了conda的原因?),但唯独上面那个环境还是一样的错误。我也尝试了升级上面环境的所有包,检查了是否存在其他问题,依旧不行,该环境的SSL、pip、setuptools等版本与base版本都相同。
关于上面的疑惑还没解决,总之目前可以先使用base或其他环境装好pre-commit的环境之后再切换到上面的环境进行commit,还是可以先将就用着。这里也记录一下,以后遇到更好的说法和解决方法再来记录。也希望有看到的同病相怜然后解决了的大佬来指导一下~