MacOS导入transformers报错缺少tokenizers(已安装)解决方法
问题背景
运行环境为macOS Monterey v12.4,在Jupyter Notebook中调用transformers库加载AutoModel、AutoTokenizer组件,执行以下导入代码时触发报错:
from transformers import AutoModel, AutoTokenizer
当前已创建配置好TensorFlow的虚拟环境,且已通过pip安装transformers与tokenizers包,执行pip install tokenizers时返回包已存在的提示,对应安装记录为虚拟环境路径下的tokenizers-0.12.1.dev0-py3.9-macosx-11.0-arm64.egg开发版本,多次尝试重装tokenizers仍无法解决导入问题。
核心报错信息
错误栈最终抛出两类异常:
- 根异常:
ModuleNotFoundError: No module named 'tokenizers',触发位置为transformers库导入快速分词器依赖时,无法找到tokenizers模块下的pre_tokenizers子模块 - 上层异常:
RuntimeError: Failed to import transformers.models.auto.tokenization_auto,由底层模块导入失败直接触发
问题产生原因
- 安装的tokenizers为0.12.1.dev0开发预览版,采用egg格式打包,这类未正式发布的自行编译版本在Apple Silicon arm64架构、Python3.9+环境下极易出现模块路径注册失效问题:pip能读取到安装记录,但Python解释器的包搜索路径中没有对应模块的入口,实际导入时会直接报找不到模块。
- 存在Jupyter Notebook内核与虚拟环境不匹配的可能:终端中激活虚拟环境执行pip操作时,修改的是tensorflow虚拟环境的包目录,但Jupyter运行代码时调用的Python内核可能是系统全局或其他conda环境的解释器,两边包路径不互通,无法读取虚拟环境中安装的依赖。
修复步骤
按以下顺序操作排查即可解决问题:
- 校验Jupyter内核与虚拟环境的匹配性
在Jupyter的代码单元中执行以下命令,查看当前运行环境的路径:
如果输出路径不是import sys print(sys.executable) !which pip/opt/homebrew/Caskroom/miniforge/base/envs/tensorflow/bin/开头,说明内核不匹配,在终端执行以下命令给虚拟环境注册专属Jupyter内核:
操作完成后重启Jupyter,在Kernel选择菜单中切换到刚注册的# 激活目标虚拟环境 conda activate tensorflow # 安装内核依赖 pip install ipykernel # 注册内核到Jupyter python -m ipykernel install --user --name=tensorflow-envtensorflow-env内核再做后续验证。 - 替换损坏的开发版tokenizers
确认内核匹配后,在终端对应虚拟环境下执行命令,彻底卸载有问题的开发版本,安装稳定版依赖:# 卸载现有dev版本 pip uninstall -y tokenizers # 手动删除提示路径下残留的tokenizers开头的.egg文件夹,避免旧版本干扰 # 安装匹配transformers版本的稳定版tokenizers pip install tokenizers --force-reinstall注意:transformers对tokenizers版本有严格的依赖范围,若重装时出现版本冲突提示,直接执行
pip install transformers --upgrade连带升级transformers到正式稳定版即可,不要单独安装过高版本的tokenizers避免兼容性问题。 - 修复验证
重启Jupyter内核后重新执行导入代码,无ModuleNotFoundError报错即为修复完成。
内容的提问来源于stack exchange,提问作者Sanley
相关产品推荐
相关产品推荐

