Flask构建REST API测试时遇cannot import name 'Mapping'错误如何解决?
报错原因
你当前使用的Python版本为3.10+,该版本将原本位于collections模块中的抽象基类(包括Mapping、Sequence等)全部迁移到了collections.abc子模块下。而你安装的flask-jwt包已经停止维护多年,它依赖的旧版本PyJWT仍在使用Python 3.9及更早版本的导入规则,在Python3.10+环境运行就会触发该导入错误。
解决方案
- 【推荐方案】替换为活跃维护的JWT扩展:停止使用已废弃的
flask-jwt,改用目前生态主流的flask-jwt-extended,该包完全适配最新Python、Flask版本,功能也更丰富。操作步骤:- 卸载旧依赖:执行
pip uninstall flask-jwt PyJWT - 安装新依赖:执行
pip install flask-jwt-extended - 按照
flask-jwt-extended的使用规则调整现有接口的鉴权逻辑即可
- 卸载旧依赖:执行
- 【兼容方案】降级Python版本:将本地Python版本降级到3.9及以下版本,即可直接兼容旧版
flask-jwt的导入逻辑,无需修改代码 - 【临时应急方案】手动修改依赖源码:找到报错路径下的
C:\Users\kally\AppData\Roaming\Python\Python310\site-packages\jwt\api_jwt.py文件,将from collections import Mapping修改为from collections.abc import Mapping,如果后续出现其他同类抽象类导入错误,均按照该规则调整导入路径即可。该方案仅能临时解决问题,换环境或重新安装依赖后需要再次修改,不建议长期使用。
内容的提问来源于stack exchange,提问作者Gabriel kalango
相关产品推荐
相关产品推荐

