Ubuntu 18.04安装Apache Superset遇ImportError:无法导入url_encode
我太懂你折腾两周的崩溃感了——Superset的依赖版本兼容问题真的很磨人,尤其是在Python3.6这种稍旧的环境下。你遇到的ImportError: cannot import name 'url_encode',本质是新版本Werkzeug移除了旧版Flask-WTF依赖的url_encode方法,导致版本不兼容。下面是针对Ubuntu18.04 + Python3.6环境的完美适配方案:
问题根源
旧版flask-wtf会直接从werkzeug导入url_encode,但Werkzeug 2.0+已经把这个方法迁移到了werkzeug.urls模块,并且修改了调用方式。而Python3.6只能支持Superset 1.4.x版本,所以必须锁定一套完全兼容的依赖版本。
适配的requirements.txt文件
直接用下面的依赖清单,确保所有库版本互相兼容:
# Apache Superset 1.4.3 适配 Python3.6 + Ubuntu18.04 superset==1.4.3 flask==1.1.4 flask-appbuilder==3.3.4 flask-wtf==0.14.3 werkzeug==1.0.1 sqlalchemy==1.3.24 pandas==1.1.5 jinja2==2.11.3 markupsafe==2.0.1 python-dateutil==2.8.2 requests==2.26.0 celery==4.4.7 redis==3.5.3 psycopg2-binary==2.8.6 # 若使用MySQL,替换为 mysqlclient==2.0.3
完整安装&修复步骤
- 清理现有冲突依赖
先把之前安装的相关库全部卸载,避免残留:
pip uninstall -y werkzeug flask-wtf flask-appbuilder superset
- 安装系统级依赖(Ubuntu18.04必做)
Superset需要一些系统库支持,先安装:
sudo apt-get update && sudo apt-get install -y build-essential libssl-dev libffi-dev python3.6-dev libsasl2-dev libldap2-dev
- 创建虚拟环境(强烈推荐)
用虚拟环境隔离依赖,避免污染全局Python环境:
python3.6 -m venv superset_env source superset_env/bin/activate
- 安装依赖并初始化
# 安装指定版本依赖 pip install -r requirements.txt # 创建管理员账号 superset fab create-admin # 初始化数据库(这一步之前失败的问题现在应该解决了) superset db upgrade # 可选:加载示例数据,方便测试 superset load_examples # 初始化角色与权限 superset init # 启动Superset服务 superset run -p 8088 --with-threads --reload --debugger
额外提醒
- 如果之前用过SQLite作为数据库,建议删除当前目录下的
superset.db文件后再执行db upgrade,避免旧数据结构冲突。 - Python3.6已经停止维护,长期来看建议升级到Python3.8+,但如果必须用3.6,上面的版本组合是经过验证的稳定版本。
内容的提问来源于stack exchange,提问作者James Vasanth




