MacBook上Python3.12.5导入spaCy和gensim遇TypeError求助
问题原因与解决方法
原因分析
这个错误确实和Python 3.12的版本更新有关:Python 3.12对typing.ForwardRef._evaluate()方法新增了recursive_guard这个必填关键字参数,但你当前使用的spaCy 3.7.5和gensim 4.3.2版本的代码中,调用该方法时没有传入这个参数,导致类型错误。
解决方法
方法一:降级Python到3.11.x版本
Python 3.12是较新的大版本,很多第三方库还在适配中,降级到稳定的3.11系列可以直接解决兼容性问题:
- 如果用pyenv管理版本:
pyenv install 3.11.6 pyenv local 3.11.6 - 如果用conda管理:
conda create -n py311 python=3.11.6 conda activate py311
之后重新安装spaCy和gensim即可正常使用。
方法二:升级spaCy和gensim到适配Python 3.12的版本
检查并升级到库的最新稳定版,看是否已经修复了Python 3.12的兼容性问题:
pip install --upgrade spacy gensim
如果升级后仍报错,说明官方还未发布适配版本,可以关注库的更新动态,等待后续修复。
方法三:临时修改typing模块(不推荐)
如果不想降级或等待更新,可以手动修改Python的typing.py文件,给ForwardRef._evaluate()方法的recursive_guard参数添加默认值:
- 找到Python安装目录下的
typing.py文件(比如路径为/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/typing.py) - 找到
ForwardRef类的_evaluate方法,将方法定义修改为:def _evaluate(self, globalns=None, localns=None, recursive_guard=frozenset()): - 保存文件后重启Jupyter Notebook即可。
注意:这个方法是临时 workaround,后续更新Python或相关库时会被覆盖,且可能影响其他依赖typing模块的库。
内容的提问来源于stack exchange,提问作者M K Snowman
相关产品推荐
相关产品推荐

