安装Spacy GPU支持后无法运行,重装仍报错求助
问题背景
- 环境:Intel芯片macOS系统,Python 3.11.3
- 操作过程:原本Spacy可正常使用,尝试执行
pip install -U 'spacy[cuda113]'添加GPU支持后出现报错;卸载该包并通过pip install spacy重装Spacy后,运行仅含import spacy的脚本仍触发如下报错:
Traceback (most recent call last):
File "/Users/steve/workshop/python/blah.py", line 4, in
import spacy
File "/usr/local/lib/python3.11/site-packages/spacy/init.py", line 14, in
from . import pipeline # noqa: F401
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/spacy/pipeline/init.py", line 1, in
from .attributeruler import AttributeRuler
File "/usr/local/lib/python3.11/site-packages/spacy/pipeline/attributeruler.py", line 6, in
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 "/usr/local/lib/python3.11/site-packages/spacy/tokens/init.py", line 1, in
from .doc import Doc
File "spacy/tokens/doc.pyx", line 36, in init spacy.tokens.doc
File "/usr/local/lib/python3.11/site-packages/spacy/schemas.py", line 158, in
class TokenPatternString(BaseModel):
File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 369, in new
cls.signature = ClassAttribute('signature', generate_model_signature(cls.init, fields, config))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/pydantic/utils.py", line 231, in generate_model_signature
merged_params[param_name] = Parameter(
^^^^^^^^^^
File "/usr/local/Cellar/python@3.11/3.11.3/Frameworks/Python.framework/Versions/3.11/lib/python3.11/inspect.py", line 2722, in init
raise ValueError('{!r} is not a valid parameter name'.format(name))
ValueError: 'in' is not a valid parameter name
原因分析
报错根源是旧版本Pydantic(<2.0)与Python 3.11不兼容。Python 3.11对关键字参数的检查更严格,而旧版Pydantic生成模型签名时,会将in这类Python关键字当作参数名,触发参数命名合法性校验错误。安装spacy[cuda113]时可能引入了不兼容的Pydantic版本,后续卸载重装Spacy时未同步更新该依赖。
解决方案
彻底卸载冲突包
执行命令清理Spacy和旧版Pydantic:pip uninstall -y spacy pydantic安装兼容版本
直接安装最新版Spacy,它会自动匹配支持Python 3.11的Pydantic版本:pip install --upgrade spacy也可手动指定Pydantic版本(推荐使用前者自动适配):
pip install spacy pydantic>=2.0验证修复
运行仅含import spacy的脚本,确认报错消失。
内容的提问来源于stack exchange,提问作者StevieD

