Python导入openpyxl报错:无法从collections导入Mapping如何解决?
问题根因
你安装的openpyxl版本过低,和你使用的Python 3.10版本不兼容。Python 3.3起就将Mapping这类抽象基类从collections模块迁移到了collections.abc子模块,Python 3.10及以上版本直接移除了collections模块下的旧导入入口,旧版本openpyxl仍使用旧导入语法就会触发该报错。
解决方法
方案一:升级openpyxl到最新兼容版本(优先推荐)
- 直接在终端执行升级命令:
pip install --upgrade openpyxl - 如果升级时提示权限不足,可执行:
pip install --upgrade openpyxl --user - 如果你使用conda环境,执行:
conda update openpyxl
升级完成后重新运行代码即可正常导入openpyxl。
方案二:手动适配旧版本openpyxl(仅适用于不能升级openpyxl的场景)
如果项目要求必须使用当前的旧版本openpyxl,可手动修改源码适配:
- 打开报错提示的文件:
C:\Users\*User Name*\AppData\Local\Programs\Python\Python310\lib\site-packages\openpyxl\formatting\rules.py - 找到第5行的
from collections import Mapping,修改为:from collections.abc import Mapping - 后续如果遇到其他同类
cannot import name 'XXX' from 'collections'报错,都按照同样逻辑,将对应的导入源改为collections.abc即可。
内容的提问来源于stack exchange,提问作者Borislav
相关产品推荐
相关产品推荐

