运行superset db upgrade报错:无法从werkzeug.security导入safe_str_cmp
问题解决:Superset db upgrade 报错 'cannot import name 'safe_str_cmp' from 'werkzeug.security'
错误原因分析
- Werkzeug版本兼容性问题:
safe_str_cmp函数在Werkzeug 2.1.0及以上版本中被从werkzeug.security移除,你当前环境的Werkzeug版本(2.2.3)超出了Apache Superset 2.0.1的支持范围,导致依赖库(如Flask-AppBuilder)无法找到该函数。 - 重复Superset包冲突:你的依赖列表中同时存在
apache-superset==2.0.1和superset==0.30.1,这两个是同一软件的不同命名版本(旧版叫superset,新版更名为apache-superset),同时安装会引发严重的依赖混乱。 - 依赖冲突提示(翻译):
错误:pip的依赖解析器目前未考虑所有已安装的包。此行为导致以下依赖冲突:flask 2.2.3 需要 Werkzeug>=2.2.2,但您安装的werkzeug版本是2.0.3,二者不兼容。
解决方案步骤
1. 清理冲突的Superset包
先卸载所有Superset相关包,彻底清除版本冲突:
pip uninstall -y superset apache-superset
2. (推荐)用虚拟环境隔离依赖
创建并激活虚拟环境,避免全局依赖被污染:
# 创建虚拟环境 python -m venv superset_env # Windows系统激活 superset_env\Scripts\activate # Linux/Mac系统激活 source superset_env/bin/activate
3. 安装兼容版本的Superset及依赖
安装Apache Superset 2.0.1,并指定匹配的Flask和Werkzeug版本,确保依赖完全兼容:
pip install apache-superset==2.0.1 Flask==2.0.3 Werkzeug==2.0.3
4. 重新执行数据库升级
完成安装后,运行数据库升级命令:
superset db upgrade
补充说明
Apache Superset 2.0.1的官方依赖要求Flask版本在>=2.0.1,<2.2.0、Werkzeug版本在>=2.0.1,<2.2.0范围内,指定版本安装可避免大部分兼容性问题。若需使用更高版本的Flask/Werkzeug,需升级到支持该版本的Superset新版本(如2.1.0及以上),同时注意对应Python版本要求。
内容的提问来源于stack exchange,提问作者vivek singh
相关产品推荐
相关产品推荐

