导入错误:无法从“click”导入名称“_unicodefun”

zer*_*ewl 178 python python-black

当使用 Python Black包运行 lint 检查时,会出现错误:

ImportError:无法从“click”导入名称“_unicodefun”(/Users/robot/.cache/pre-commit/repo3u71ccm2/py_env-python3.9/lib/python3.9/site-packages/click/ init .py)`

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

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

zer*_*ewl 230

Black 22.3.0 已修复此问题。之前的版本无法与 Click 8.1.0 一起使用。

与 click 8.1.0 不兼容(ImportError:无法从“click”导入名称“_unicodefun”)#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
Run Code Online (Sandbox Code Playgroud)

https://github.com/Clinical-Genomics/cgb​​eacon2/pull/221/files

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


Sar*_*ser 40

如果您将其用作black预提交挂钩 YAML 的一部分,则可以更新预提交文件(通常.pre-commit-config.yaml)以引用更新版本的 black (>=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/
Run Code Online (Sandbox Code Playgroud)

如果 YAML 文件将自身固定到特定版本,则运行新版本的 pip installblack不足以用于命令行预提交挂钩...默认情况下是这样。另请参阅Black 的 GitHub 问题跟踪器。blackpre-commit


小智 18

如果上述方法都不起作用,则可能会因之前对代码的更改而导致缓存出现问题。尝试运行:

pre-commit clean
pre-commit autoupdate
Run Code Online (Sandbox Code Playgroud)


wil*_*eng 7

修复

以下是一些常见的用例:

解决预提交 yaml 中的错误

.pre-commit-config.yaml

- repo: https://github.com/psf/black
  rev: 22.3.0
  hooks:
    - id: black
Run Code Online (Sandbox Code Playgroud)

如果问题在预提交中仍然存在,可能是因为正在缓存旧版本(如此处建议pre-commit clean然后运行pre-commit install以重置

解决 pyprojct toml 中的错误

pyproject.toml

[tool.poetry.dev-dependencies]
black = {version = "^22.3.0", allow-prereleases = true}

[tool.black]
# https://github.com/psf/black
target-version = ["py39"]
line-length = 120
color = true
Run Code Online (Sandbox Code Playgroud)

例子

要求pyproject.toml以上

使用 Makefile 和诗歌

Makefile

#* Poetry
.PHONY: poetry-download
poetry-download:
    curl -sSL https://install.python-poetry.org | $(PYTHON) -

.PHONY: pre-commit-install
pre-commit-install:
    poetry run pre-commit install

#* Formatters
.PHONY: codestyle
codestyle:
    poetry run black --config pyproject.toml ./
Run Code Online (Sandbox Code Playgroud)

.pre-commit-config.yaml

default_language_version:
  python: python3.9

default_stages: [commit, push]

repos:
  - repo: local
    hooks:
      - id: black
        name: black
        entry: poetry run black --config pyproject.toml
        types: [python]
        language: system
Run Code Online (Sandbox Code Playgroud)

GitHub 链接

依赖冲突在以下链接中有详细描述