Python无法导入spaCy及下载en_core_web_sm问题求助
解决spaCy导入及模型下载报错问题
问题概述
- 导入spaCy时触发
ImportError: cannot import name util - 执行
python -m spacy download en_core_web_sm时触发TypeError: issubclass() arg 1 must be a class - 已确认spaCy已安装,尝试卸载模型但提示未安装
错误详情
Error1:导入spaCy失败
ImportError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_11524/513823458.py in <module> 1 import sys ----> 2 import spacy ~\AppData\Roaming\Python\Python39\site-packages\spacy\__init__.py in <module> 12 from thinc.api import Config 13 ---> 14 from . import pipeline # noqa: F401 15 from .cli.info import info # noqa: F401 16 from .glossary import explain # noqa: F401 ~\AppData\Roaming\Python\Python39\site-packages\spacy\pipeline\__init__.py in <module> ----> 1 from .attributeruler import AttributeRuler 2 from .dep_parser import DependencyParser 3 from .edit_tree_lemmatizer import EditTreeLemmatizer 4 from .entity_linker import EntityLinker 5 from .ner import EntityRecognizer ~\AppData\Roaming\Python\Python39\site-packages\spacy\pipeline\attributeruler.py in <module> 4 from pathlib import Path 5 ---> 6 from .pipe import Pipe 7 from ..errors import Errors 8 from ..training import Example ~\AppData\Roaming\Python\Python39\site-packages\spacy\pipeline\pipe.pyx in init spacy.pipeline.pipe() ~\AppData\Roaming\Python\Python39\site-packages\spacy\vocab.pyx in init spacy.vocab() ~\AppData\Roaming\Python\Python39\site-packages\spacy\tokens\__init__.py in <module> ----> 1 from .doc import Doc 2 from .token import Token 3 from .span import Span 4 from .span_group import SpanGroup 5 from ._serialize import DocBin ~\AppData\Roaming\Python\Python39\site-packages\spacy\tokens\doc.pyx in init spacy.tokens.doc() ImportError: cannot import name util
Error2:模型下载失败
Traceback (most recent call last): File "C:\Users\akira\anaconda3\lib\runpy.py", line 188, in _run_module_as_main mod_name, mod_spec, code = _get_module_details(mod_name, _Error) File "C:\Users\akira\anaconda3\lib\runpy.py", line 147, in _get_module_details return _get_module_details(pkg_main_name, error) File "C:\Users\akira\anaconda3\lib\runpy.py", line 111, in _get_module_details __import__(pkg_name) File "C:\Users\akira\AppData\Roaming\Python\Python39\site-packages\spacy\__init__.py", line 14, in <module> from . import pipeline # noqa: F401 File "C:\Users\akira\AppData\Roaming\Python\Python39\site-packages\spacy\pipeline\__init__.py", line 1, in <module> from .attributeruler import AttributeRuler File "C:\Users\akira\AppData\Roaming\Python\Python39\site-packages\spacy\pipeline\attributeruler.py", line 6, in <module> from .pipe import Pipe File "spacy\pipeline\pipe.pyx", line 1, in init spacy.pipeline.pipe File "spacy\vocab.pyx", line 1, in init spacy.vocab File "C:\Users\akira\AppData\Roaming\Python\Python39\site-packages\spacy\tokens\__init__.py", line 1, in <module> from .doc import Doc File "spacy\tokens\doc.pyx", line 36, in init spacy.tokens.doc File "C:\Users\akira\AppData\Roaming\Python\Python39\site-packages\spacy\schemas.py", line 222, in <module> class TokenPattern(BaseModel): File "pydantic\main.py", line 205, in pydantic.main.ModelMetaclass.__new__ File "pydantic\fields.py", line 491, in pydantic.fields.ModelField.infer File "pydantic\fields.py", line 421, in pydantic.fields.ModelField.__init__ File "pydantic\fields.py", line 537, in pydantic.fields.ModelField.prepare File "pydantic\fields.py", line 634, in pydantic.fields.ModelField._type_analysis File "pydantic\fields.py", line 641, in pydantic.fields.ModelField._type_analysis File "C:\Users\akira\anaconda3\lib\typing.py", line 847, in __subclasscheck__ return issubclass(cls, self.__origin__) TypeError: issubclass() arg 1 must be a class
解决方案
1. 彻底清理现有spaCy及依赖
执行以下命令卸载所有相关包:
pip uninstall -y spacy pydantic thinc
2. 安装兼容版本
针对Python 3.9,推荐安装spaCy 3.4.x版本(该版本与Python3.9及pydantic 1.x完全兼容):
pip install spacy==3.4.4
3. 下载模型
重新运行模型下载命令:
python -m spacy download en_core_web_sm
4. 验证安装
创建测试脚本验证导入和使用:
import spacy nlp = spacy.load("en_core_web_sm") doc = nlp("Hello, world!") for token in doc: print(token.text, token.pos_)
原因说明
出现这两个错误的核心是版本不兼容:
- 较新的spaCy版本(3.5+)对Python 3.9的类型处理存在兼容性问题,且依赖的pydantic 2.x与Python3.9的typing模块不匹配,导致
issubclass报错 ImportError: cannot import name util是因为spaCy内部模块依赖缺失或版本冲突,清理后重新安装兼容版本即可解决
内容的提问来源于stack exchange,提问作者Akira Yoshimura
相关产品推荐
相关产品推荐

