使用asdf安装pre-commit 3.0.1后出现importlib.metadata缺失错误
pre-commit 3.0.1 运行报错:ModuleNotFoundError: No module named 'importlib.metadata'
通过asdf工具安装pre-commit 3.0.1版本后,执行pre-commit -v命令时触发以下错误:
Traceback (most recent call last): File "/Users/san/.cache/pre-commit-zipapp/6Bkef3U7os33XPapd4VZ7HEfyUexbeBTjOn51afz0r8/python", line 47, in <module> raise SystemExit(main()) File "/Users/san/.cache/pre-commit-zipapp/6Bkef3U7os33XPapd4VZ7HEfyUexbeBTjOn51afz0r8/python", line 34, in main runpy.run_module(args.m, run_name='__main__', alter_sys=True) File "/Users/san/.pyenv/versions/3.7.9/lib/python3.7/runpy.py", line 205, in run_module return _run_module_code(code, init_globals, run_name, mod_spec) File "/Users/san/.pyenv/versions/3.7.9/lib/python3.7/runpy.py", line 96, in _run_module_code mod_name, mod_spec, pkg_name, script_name) File "/Users/san/.pyenv/versions/3.7.9/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/Users/san/.cache/pre-commit-zipapp/6Bkef3U7os33XPapd4VZ7HEfyUexbeBTjOn51afz0r8/wheels/pre_commit-3.0.1-py2.py3-none-any.whl/pre_commit/__main__.py", line 3, in <module> File "/Users/san/.cache/pre-commit-zipapp/6Bkef3U7os33XPapd4VZ7HEfyUexbeBTjOn51afz0r8/wheels/pre_commit-3.0.1-py2.py3-none-any.whl/pre_commit/main.py", line 9, in <module> File "/Users/san/.cache/pre-commit-zipapp/6Bkef3U7os33XPapd4VZ7HEfyUexbeBTjOn51afz0r8/wheels/pre_commit-3.0.1-py2.py3-none-any.whl/pre_commit/constants.py", line 3, in <module> ModuleNotFoundError: No module named 'importlib.metadata'
环境信息
- Python版本:3.7.9
- asdf版本:v0.11.1
解决方法
方案1:安装兼容的importlib-metadata包
Python 3.7中importlib.metadata并非标准库自带,需要安装backport版本。执行以下命令:
pip install importlib-metadata==4.13.0
(注:4.13.0是支持Python 3.7的最高版本,更高版本不再兼容3.7)
方案2:升级Python版本
Python 3.8及以上版本已将importlib.metadata纳入标准库,无需额外安装依赖。通过asdf升级Python:
asdf install python 3.8.18 asdf global python 3.8.18
方案3:确保在asdf管理的Python环境中安装依赖
如果使用多个Python环境,先激活目标环境再安装:
asdf local python 3.7.9 pip install importlib-metadata==4.13.0
内容的提问来源于stack exchange,提问作者SANN3
相关产品推荐
相关产品推荐

