钩子 `black` 需要预提交版本 2.9.2 但已安装版本 2.6.0

问题描述

我在 pre-commit 和 black 方面遇到问题。

一切正常,直到我用 pre-commit clean 清除了缓存。现在我总是收到错误

钩子 black 需要预提交版本 2.9.2,但已安装版本 2.6.0。也许运行`pip install --upgrade pre-commit

如果我检查我的版本,我运行的是最新的预提交版本 (v2.12.1)。此外,如果我运行推荐的命令,则不会发生任何变化,并且会出现相同的错误。如果我停用 black 钩子,错误就会消失,所以我至少知道这是黑色的问题。

我尝试将黑色版本从 stable 更改为最新版本,但没有任何帮助。

有什么想法可以解决这个问题吗?

我的预提交配置:

  - repo: https://github.com/ambv/black
    rev: stable
    hooks:
      - id: black
        language_version: python3.8
        exclude: |
          (?x)(
              migrations/|
              config/|
              _build/|
              buck-out/|
              build/|
              dist/
          )

非常感谢您的帮助

解决方法

rev: stable 不是受支持的配置 -- 当您运行时,您还会收到一条警告,准确地告诉您:

$ pre-commit  run black --all-files
[WARNING] The 'rev' field of repo 'https://github.com/ambv/black' appears to be a mutable reference
(moving tag / branch).  Mutable references are never updated after first install and are not
supported.  See https://pre-commit.com/#using-the-latest-version-for-a-repository for more details.
Hint: `pre-commit autoupdate` often fixes this.
...

警告还告诉您这样做的基本原理并解释您看到的行为:首次安装后永远不会更新可变引用 - 所以您的缓存中的版本来自旧版本的黑色当你清除它时,它会更新到最新的

最新版本的 black 在其定义中使用 types_or,这需要更新版本的 pre-commit

顺便说一句,您的 exclude 没有做您想做的事 -- pre-commit 仅在签入存储库的文件上运行,因此排除了 dist 和 {{1} 之类的内容} 没有必要

要修复您看到的实际错误消息,请确保 _build(如果您从第一次移动到安装了 pre-commit 的位置,还可能使用 pip install --upgrade pre-commit time) -- pre-commit install 可以帮助您定位所有安装


免责声明:我是 pre-commit 的创建者