Flask应用启动报错:无法从werkzeug.security导入safe_str_cmp
解决Flask启动时
ImportError: cannot import name 'safe_str_cmp' from 'werkzeug.security'问题 问题根源
从报错回溯可知,flask_jwt_extended的tokens.py尝试从werkzeug.security导入safe_str_cmp失败。你的Werkzeug 2.0.3版本中该函数确实存在,问题大概率出在依赖包的安装冲突或版本兼容细节上(比如flask-appbuilder与flask-jwt-extended的隐性版本冲突,你的依赖列表未显示flask-appbuilder但报错中明确加载了它)。
解决方案
1. 彻底重建依赖环境
先卸载所有相关包,清除残留:
pip uninstall -y Flask Flask-JWT-Extended Werkzeug flask-appbuilder
安装经过验证的兼容版本组合:
pip install Flask==2.0.0 Werkzeug==2.0.3 Flask-JWT-Extended==4.5.0 flask-appbuilder==4.1.4
2. 强制使用虚拟环境隔离
如果之前未用虚拟环境,全局包冲突是常见诱因:
# 创建Python3.8虚拟环境 python3.8 -m venv flask_env # 激活(Linux/macOS) source flask_env/bin/activate # Windows激活命令:flask_env\Scripts\activate # 重新安装依赖 pip install Flask==2.0.0 Werkzeug==2.0.3 Flask-JWT-Extended==4.5.0 flask-appbuilder==4.1.4
3. 临时代码修复(应急用)
若上述方法无效,可临时修改flask_jwt_extended的导入逻辑:
找到文件/home/rozenn/.local/lib/python3.8/site-packages/flask_jwt_extended/tokens.py,将第6行:
from werkzeug.security import safe_str_cmp
替换为:
try: from werkzeug.security import safe_str_cmp except ImportError: from werkzeug.utils import safe_str_cmp
注意:此修改会被后续包更新覆盖,仅作为临时应急方案
额外检查项
- 确认
flask-appbuilder的安装来源:你的pip freeze未列出该包,若用conda等其他工具安装,可能导致版本协同问题,建议统一用pip安装 - 验证Python版本:Python3.8与上述推荐包版本完全兼容,无需更换版本
内容的提问来源于stack exchange,提问作者rznrd
相关产品推荐
相关产品推荐

