Python3.10环境运行Flask-JWT项目导入Mapping报错无法启动服务如何解决
问题原因
这个报错是你使用的flask-jwt依赖的旧版本PyJWT库和Python3.10版本不兼容导致的:Python从3.10版本开始,移除了collections模块下的Mapping类,该类已被迁移到collections.abc模块下,旧版本库的导入语句不符合新版本Python的语法规则。
解决方案
推荐优先选择方案1,长期稳定性更好:
方案1:替换为活跃维护的JWT库
flask-jwt已经停止维护多年,完全不适配3.10+版本的Python,建议替换为目前社区主流的Flask-JWT-Extended库,适配全版本Python3.6+,功能也更全面:
- 先卸载旧的依赖库:
pip uninstall -y flask-jwt PyJWT
- 安装新的JWT库:
pip install flask-jwt-extended
- 同步修改代码导入语句,将原有的
from flask_jwt import JWT, JWT_required调整为对应语法即可,原有业务逻辑仅需少量调整即可适配。
方案2:保留原有flask-jwt逻辑的临时解决方法
如果不想修改原有代码,可以选择以下任意一种方式处理:
- 方法A:将项目运行的Python版本降级到3.9及更早版本,可直接兼容旧版本依赖
- 方法B:手动修改依赖库的导入语句,打开报错提示的
jwt/api_jws.py文件,将第5行的from collections import Mapping修改为:
try: from collections.abc import Mapping except ImportError: from collections import Mapping
修改后即可正常启动服务,该兼容写法同时适配新旧版本Python。
内容的提问来源于stack exchange,提问作者Oleksii Khorishko
相关产品推荐
相关产品推荐

