programing

가져오기 오류: '클릭'에서 '_unicodefun' 이름을 가져올 수 없습니다.

stoneblock 2023. 6. 18. 10:10

가져오기 오류: '클릭'에서 '_unicodefun' 이름을 가져올 수 없습니다.

Python Black 패키지로 린트 검사를 실행하면 다음과 같은 오류가 발생합니다.

가져오기 오류: '클릭'(/Users/robot/.cache/precommit/repo3u71ccm2/py_env-python3.9/lib/python3.9/site-packages/click/init.py ')에서 이름 '_novfun'을(를)으로 가져올 수 없습니다.

이를 조사하면서 저는 다음과 같은 관련 문제를 발견했습니다.

어떻게 하면 이 문제를 해결할 수 있을까요?이것이 린터의 잘못된 양성입니까?코드를 수정해야 합니까?

이 문제는 Black 22.3.0에 의해 해결되었습니다.8.1.0을 클릭하면 이전 버전이 작동하지 않습니다.

click 8.1.0과 호환되지 않음(가져오기 오류: '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

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

해결 방법으로 핀click을 통해 마지막 버전까지pip install --upgrade click==8.0.2.

사용 중인 경우black사전 커밋 후크의 YAML의 일부로 사전 커밋 파일을 업데이트할 수 있습니다(종종.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/

의 새 버전에 대한 pip 설치 실행blackYAML 파일 핀이 있는 경우 명령줄 사전 커밋 후크로는 충분하지 않습니다.black그 자체가 특정 버전으로...어떤.pre-commit기본적으로 수행합니다.Black의 GitHub 이슈 추적기도 참조하십시오.

위의 내용이 모두 작동하지 않으면 코드의 이전 변경 사항에서 문제를 일으키는 캐시가 있을 수 있습니다.실행 시도:

pre-commit clean
pre-commit autoupdate

고치다

다음은 몇 가지 일반적인 사용 사례입니다.

사전 커밋 yaml에서 주소 지정 오류 발생

.pre-commit-config.yaml

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

사전 커밋에서 문제가 지속될 경우 이전 버전이 캐시되고 있기 때문일 수 있습니다(여기에서 제안함).달려.pre-commit clean그리고나서pre-commit install재설정

pyproject 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

을 요구합니다.pyproject.toml위에

Makefile & Poetry 사용

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

GitHub 링크

종속성 충돌은 다음 링크에 자세히 설명되어 있습니다.

검은색을 사용하여 Python 2.7 코드를 포맷하고 있으며 Python 2.7 지원 중단으로 인해 검은색 업데이트선택사항이 아닌 경우 click==8.0.4를 설치합니다.아래는.github/workflows/black.yml기존 파이썬 2.7 프로젝트에 사용한 GitHub 액션의 경우.

name: Black check

on: [pull_request]

jobs:
  black-check:
    runs-on: ubuntu-22.04
    name: Black
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@master
        with:
          python-version: 3.8
      - name: install black
        run: |
          pip install click==8.0.4 black==21.9b0
      - name: run black
        run: |
          black . -t py27 --check

black revision 20.8b1(python27 코드를 정리할 수 있음)의 additional_dependencies 섹션에서 클릭 버전 8.0.2를 지정해야 합니다.

- repo: https://github.com/psf/black
  rev: 20.8b1
  hooks:
    - id: black
      name: Blacken python source
      additional_dependencies: ["click==8.0.2"]

언급URL : https://stackoverflow.com/questions/71673404/importerror-cannot-import-name-unicodefun-from-click