Superset 是一款由 Airbnb 开源的“现代化的企业级 BI(商业智能) Web 应用程序”,其通过创建和分享 dashboard,为数据分析提供了轻量级的数据查询和可视化方案。参考网上的安装总是出错,这里记录一下安装过程。很有参考的一篇文章:Superset在windows下的安装配置及基础教程

一、首先安装python3,可以去官网下载并安装,记得安装时勾选加入环境变量。记得自己的安装目录,我选的是默认安装路径:

C:\Users\xxx\AppData\Local\Programs\Python\Python37

二、国外pypi镜像下载较慢,更改为国内的镜像,采用清华的镜像,网上一般说的阿里的镜像地址有点问题,注意查询修改。
临时使用

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

设为默认

升级 pip 到最新的版本 (>=10.0.0) 后进行配置:

pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

如果您到 pip 默认源的网络连接较差,临时使用本镜像站来升级 pip:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U

网上说修改镜像后,部分仍会从国外选择,此时选择修改python安装目录下的文件:

XXX\Python37\Lib\site-packages\setuptools\package_index.py

搜索关键字:PackageIndex,改为下面所示

class PackageIndex(Environment):
    """A distribution index that scans web pages for download URLs"""

    def __init__(
            self, index_url="https://pypi.tuna.tsinghua.edu.cn/simple", hosts=('*',),
            ca_bundle=None, verify_ssl=True, *args, **kw
    ):

三、安装superset,执行命令

pip install superset

此时,会安装依赖,会花点时间。注意是否有报错,哪里没有安装成功,可以网上下载.whl文件,直接安装即可。我报错如下所示。

ERROR: No matching distribution found for prison<1.0.0,>=0.1.2 (from flask-appbuilder<2.3.0,>=2.1.9->superset)
pip install "C:\Users\xxxx\Downloads\prison-0.1.2-py2.py3-none-any.whl"

如果担心,可以多执行一遍安装。文件下载地址:https://pypi.org/project/prison/#files

四、其他操作

创建管理员帐号

fabmanager create-admin --app superset

初始化数据库 (windows下,先进入到Python安装目录xxx/lib/site-packages/superset/bin下)

Python superset db upgrade

加载例子(后续操作都需要在xxx/lib/site-packages/superset/bin下),这里需要等待一段时间,类似无响应,等待即可。

Python superset load_examples

初始化角色和权限

Python superset init

启动服务,端口 8088, 使用 -p 更改端口号。

Python superset run -p 8088

网上一般使用Python superset runserver -d,会报错如下

Usage: superset [OPTIONS] COMMAND [ARGS]...
Error: No such command "runserver".

自此,Superset安装启动成功。打开http://127.0.0.1:8088即可进行后续操作。

其他
将 Expose in SQL Lab 和 Allow Run Sync 都勾选上,其余的不要勾选,如果报错AttributeError: module 'signal' has no attribute 'SIGALRM',是由于 Windows 环境下依赖包不兼容导致的 —— Python 的 signal 包只作用于 Linux 和 Mac ,在 Windows 下不启作用。
直接定位错误文件(例如我的是XXX/lib/site-packages/superset/utils/core.py),注释掉signal所在行,增加pass即可。

    def __enter__(self):
        try:
            pass
            #signal.signal(signal.SIGALRM, self.handle_timeout)
            #signal.alarm(self.seconds)
        except ValueError as e:
            logging.warning("timeout can't be used in the current context")
            logging.exception(e)

    def __exit__(self, type, value, traceback):
        try:
            pass
            #signal.alarm(0)
        except ValueError as e:
            logging.warning("timeout can't be used in the current context")
            logging.exception(e)