如何修复Python报错:ImportError: cannot import name 'Mapping' from 'collections'
解决Python3.11运行适配3.6的项目时Jinja2导入报错问题
问题根源
Python 3.10及以上版本中,collections.Mapping被迁移到collections.abc.Mapping,但项目依赖的旧版Jinja2仍在使用旧的导入路径,导致报错。直接升级Jinja2又会和项目其他依赖冲突,可尝试以下几种解决方法:
方案一:使用Python3.6虚拟环境(最稳妥)
这是最贴合项目适配环境的方案,彻底避免版本兼容问题:
- 安装Python3.6版本(Windows可从Python官网归档区获取对应系统安装包)
- 在项目目录下创建Python3.6专属虚拟环境:
# Windows py -3.6 -m venv virt_mgpdm # Linux/macOS python3.6 -m venv virt_mgpdm - 激活虚拟环境:
# Windows virt_mgpdm\Scripts\activate # Linux/macOS source virt_mgpdm/bin/activate - 重新安装项目依赖:
pip install -r requirements.txt - 再运行
python app.py即可正常启动
方案二:修改Jinja2源码临时修复
不想更换Python版本的话,可直接修改Jinja2的导入语句:
- 找到报错提示中的
jinja2/tests.py文件,路径为:C:\Users\p\Desktop\Movie-Genre-Prediction-Deployment-master\virt_mgpdm\Lib\site-packages\jinja2\tests.py - 打开文件,将第13行的:
修改为:from collections import Mappingfrom collections.abc import Mapping - 若后续出现其他类似
collections相关导入错误(如Iterable、KeysView等),统一改成从collections.abc导入 - 保存文件后重新运行项目
方案三:锁定兼容的Jinja2版本
尝试找一个既能适配Python3.11,又尽量兼容项目旧依赖的Jinja2版本:
- 先卸载当前Jinja2:
pip uninstall jinja2 -y - 安装Jinja2 2.11.3版本(这个版本是旧版分支中较稳定的,修改导入后可适配Python3.11):
pip install jinja2==2.11.3 - 之后按照方案二的方法修改
tests.py中的导入语句,即可兼顾版本兼容和项目运行
内容的提问来源于stack exchange,提问作者S.T.A.Y
相关产品推荐
相关产品推荐

