ImportError: cannot import name '_unicodefun' from 'click'

ImportError: cannot import name '_unicodefun' from 'click'

当 运行 我们的 lint 检查 Python Black 包时,出现错误:

ImportError: cannot import name '_unicodefun' from 'click' (/Users/robot/.cache/pre-commit/repo3u71ccm2/py_env-python3.9/lib/python3.9/site-packages/click/init.py)`

在研究这个过程中,我发现了以下相关问题:

我该如何解决这个问题?这是 linter 的误报吗?我需要修改我的代码吗?

Black 22.3.0 已修复此问题。之前的版本不适用于 click 8.1.0。

Incompatible with click 8.1.0 (ImportError: cannot import name '_unicodefun' from 'click') #2964

例如:black.yml

          python-version: 3.8
      - name: install black
        run: |
-          pip install black==20.8b1
+          pip install black==22.3.0
      - name: run black
        run: |
          black . --check --line-length 100

https://github.com/Clinical-Genomics/cgbeacon2/pull/221/files

作为解决方法,通过 pip install --upgrade click==8.0.2click 固定到最新版本。

如果您使用 black 作为 pre-commit 钩子的 YAML 的一部分,您可以更新 pre-commit 文件(通常是 .pre-commit-config.yaml )以引用更新的黑色版本 (>=22.3.0),例如

# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.2.0
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
    -   id: check-yaml
    -   id: check-added-large-files
-   repo: https://github.com/psf/black
    rev: 22.3.0
    hooks:
    -   id: black
        exclude: ^dist/

运行 如果 YAML 文件固定 black 本身,black 的新版本的 pip 安装将不足以满足 command-line pre-commit 挂钩到特定版本... pre-commit 默认情况下。另见 Black's GitHub Issue Tracker.