You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:17:56