从PyPI安装Superset

本文主要记录本人从PyPI安装Superset的过程和遇到的问题。从PyPI安装Superset,首先应先创建虚拟环境。可以参考我的另外两篇博文,学习Python和虚拟环境的管理:

Superset目前不支持Python3.12。具体错误信息和原因见我的另外一篇博客:Superset暂不支持Python 3.12

操作系统依赖

Superset 在其元数据库中存储数据库连接信息。为此,我们使用加密 Python 库对连接密码进行加密。不幸的是,这个库具有操作系统级别的依赖。

Debian and Ubuntu

下面的命令将确保安装所需的依赖:

1
sudo apt-get install build-essential libssl-dev libffi-dev python-dev python-pip libsasl2-dev libldap2-dev default-libmysqlclient-dev

在Ubuntu 20.04中,以下命令将确保安装所需的依赖:

1
sudo apt-get install build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev default-libmysqlclient-dev

Python 虚拟环境

创建并激活虚拟环境:

1
2
3
4
5
6
7
8
9
10
11
12
# 使用 Python 3.11版本
$ python -V
Python 3.11.9
$ pyenv virtualenv superset
created virtual environment CPython3.11.9.final.0-64 in 268ms
creator CPython3Posix(dest=/home/zhangjc/.pyenv/versions/3.11.9/envs/superset, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/zhangjc/.local/share/virtualenv)
added seed packages: pip==24.2, setuptools==72.2.0, wheel==0.44.0
activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
$ pyenv activate superset
(superset) zhangjc@frin:~$ python -V
Python 3.11.9

安装和初始化Superset

如果选择使用MySQL作为Superset的元数据库,参见我的另外一篇博客进行配置:Superset配置。连接 MySQL 时可能会出现异常,见我的另外一篇博客:连接MySQL异常

首先,从安装 apache-superset 开始:

1
pip install apache-superset

然后,首先配置以下三项:

  • FLASK_APP
  • SECRET_KEY。注意,环境变量名称是SUPERSET_SECRET_KEY,配置文件中的名称是SECRET_KEY。可以使用命令openssl rand -base64 42生成SECRET_KEY。
  • 配置MySQL连接串。

不设置FLASK_APP会提示以下错误信息:

1
2
3
4
5
$ superset db upgrade
Usage: superset [OPTIONS] COMMAND [ARGS]...
Try 'superset --help' for help.

Error: Could not locate a Flask application. Use the 'flask --app' option, 'FLASK_APP' environment variable, or a 'wsgi.py' or 'app.py' file in the current directory.

不设置SECRET_KEY会提示以下错误信息:

1
2
3
4
5
6
7
8
9
10
$ superset db upgrade
--------------------------------------------------------------------------------
WARNING
--------------------------------------------------------------------------------
A Default SECRET_KEY was detected, please use superset_config.py to override it.
Use a strong complex alphanumeric string and use a tool to help you generate
a sufficiently random sequence, ex: openssl rand -base64 42
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Refusing to start due to insecure SECRET_KEY

以下是设置和初始化数据库过程:

1
2
3
4
5
$ export FLASK_APP=superset
$ openssl rand -base64 42
exxaWNURDIvZuqF8O75ngU+rgIXpAxkwO5AwWSKOzrIeHFwY2EvA9OPt
$ export SUPERSET_SECRET_KEY='exxaWNURDIvZuqF8O75ngU+rgIXpAxkwO5AwWSKOzrIeHFwY2EvA9OPt'
$ export SUPERSET_CONFIG_PATH=/home/zhangjc/github/superset/superset_config.py

superset_config.py文件内容如下:

1
SQLALCHEMY_DATABASE_URI = 'mysql://superset:Superset123@localhost/superset?unix_socket=/tmp/mysql.sock'

在连接串中的密码部分带有特殊字符“@”时,执行superset db upgrade时会出现错误。这是因为Superset配置数据库连接串密码不能包含@

安装MySQL驱动并初始化数据库:

1
2
$ pip install mysqlclient
$ superset db upgrade

通过运行以下命令完成安装:

1
2
3
4
5
6
7
8
9
10
11
# 在元数据库中创建一个管理用户(使用“admin”作为用户名加载示例),根据提示输入信息即可创建完毕。
superset fab create-admin

# 加载样例
superset load_examples

# 创建默认的角色和权限
superset init

# 启动调试模式的服务器
superset run -p 8088 --with-threads --reload --debugger