Importerror: Cannot Import Name '_Unicodefun' from 'Click'
When Running Our Lint Checks with the Python Black Package, an Error Comes up: Importerror: Cannot Import Name '_Unicodefun' from 'Click' (/Users/Robot/...
When running our lint checks with the Python Black package, an error comes up:
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)`
In researching this, I found the following related issues:
- ImportError: cannot import name '_unicodefun' from 'click' #2976
- ImportError: cannot import name '_unicodefun' from 'click' #6013
How can I solve this problem? Is this a false positive from the linter? Do I need to modify my code?
2 Answers
This has been fixed by Black 22.3.0. Versions before that won't work with click 8.1.0.
Incompatible with click 8.1.0 (ImportError: cannot import name '_unicodefun' from 'click') #2964
E.g.: 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
As a workaround, pin click to the last version via pip install --upgrade click==8.0.2.
If you're using black as part of a pre-commit hook's YAML, you can update the pre-commit file (often .pre-commit-config.yaml ) to reference the more recent versions of black (>=22.3.0), e.g.
# See for more information
# See for more hooks
repos:
- repo:
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- repo:
rev: 22.3.0
hooks:
- id: black
exclude: ^dist/
Running pip install of a new version of black won't be sufficient for command-line pre-commit hooks if the YAML file pins black itself to a particular version... which pre-commit does by default. See also Black's GitHub Issue Tracker.