Import Error: 无法从“ click”导入名称“_unicodefun”

当使用 Python 黑色包运行我们的 lint 检查时,会出现一个错误:

重要错误: 无法从“ click”导入名称“ _ unicodefun”(/Users/Robot/. cache/pre-commit/repo3u71ccm2/py _ env-python3.9/lib/python3.9/site-package/click/Init.py)

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

我怎样才能解决这个问题?这是内衬上的假阳性吗?我需要修改我的代码吗?

55290 次浏览

这个问题已经被 Black 22.3.0解决了。之前的版本在单击8.1.0时无法工作。

与 click 8.1.0不兼容(Import Error: can not 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 hook 的 YAML 的一部分,您可以更新 pre-commit 文件(通常是 .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/

如果 YAML 文件将 black本身固定到一个特定的版本,那么对于命令行预提交钩子来说,运行新版本 black的 pip 安装是不够的... pre-commit在默认情况下是这样做的。参见 布莱克的 GitHub 问题追踪器。

如果以上所有方法都不能正常工作,那么可能会因为以前的代码更改而导致缓存出现问题:

pre-commit clean

pre-commit autoupdate

Psf/black项目中的这个问题 解决了依赖性差异

预提交 yaml 中的寻址错误

- repo: https://github.com/psf/black
rev: 22.3.0
hooks:
- id: black

在 pyproject 中寻址错误

[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

使用 Makefile & amp

需要上面的平面图

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 ./

.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