一、环境依赖
- Win10操作系统
- anaconda
- python3.6
二、开始安装
- 创建虚拟环境,为了不让superset包与原先的包产生依赖关系(为避免出现不必要的错误,建议使用python3.6及以上版本)
conda create -n superset python=3.6
- 激活虚拟环境
activate superset
- 更新pip
python -m pip install --upgrade pip
- 安装superset 分别输入以下:
pip install apache-superset -i https://pypi.douban.com/simple
pip install superset -i https://pypi.douban.com/simple
- 安装组件(-i https://pypi.douban.com/simple表示通过国内镜像下载,速度会快些,也可以不加)
pip install wtforms_json flask_compress celery flask_migrate flask_talisman flask_caching sqlparse bleach markdown numpy pandas parsedatetime pathlib2 simplejson humanize geohash polyline geopy cryptography backoff msgpack pyarrow contextlib2 croniter retry selenium isodate -i https://pypi.douban.com/simple
- geohash这个组件安装之后在site-packages下其目录是大写的"Geohash",这导致geohash这个组件pip install之后,仍然报找不到。我们把文件夹名"Geohash"修改为“geohash”。再将geohash文件夹下_init_.py文件,用文本打开,里面的from geohash修改成 from .geohash
- 创建用户名
set FLASK_APP=superset (解决AttributeError: 'NoneType' object has no attribute 'auth_type')
flask fab create-admin (输入用户名密码并记住,之后要用)
- 初始化数据库
先切换到superset的安装目录的bin路径下:cd XXX\Lib\site-packages\superset\bin
初始化数据库:XXX\Lib\site-packages\superset\bin>python superset db upgrade
- 加载例子
python superset load_examples
或者
python superset load_examples
注意:1)以上命令的选择需根据superset包提供的命令决定,可通过python superset查看
2)出现以下错误,可直接忽略,不影响后续操作(该操作是加载数据源提供例子,供我们练习使用,该操作出错,那么superset里面就不会加载数据源,但不影响superset的使用)知道如何解决的小伙伴,欢迎给出答案
- 初始化角色和权限
python superset init
- 启动服务
python superset run --debugger (解决无法新建dashboard问题)
- 在浏览器地址栏中输入红框中的地址后,出现以下界面,则说明安装成功:
注意:用户名和密码是上文中设置的用户名和密码
三、报错处理
- 若出现安装包不存在问题,则按要求安装包
- 连接mysql报错,需要安装 mysqlclient 、pymysql
- sasl需要找对应版本的whl安装,下载到本地后使用pip install ....; 比如我的是 sasl-0.2.1-cp36-cp36m-win_amd64.whl
- superset signal.signal报错属性不存在(“module" object has no attribute 'SIGALRM')
- 注释掉这部分代码,不影响实际的使用,代码路径 C:\Users\用户名\AppData\Local\Continuum\anaconda3\envs\superset\Lib\site-packages\superset\utils\core.py(大概在727到745行)
def __enter__(self) -> None:
try:
if threading.current_thread() == threading.main_thread():
# signal.signal(signal.SIGALRM, self.handle_timeout)
# signal.alarm(self.seconds)
pass
except ValueError as ex:
logger.warning("timeout can't be used in the current context")
logger.exception(ex)
def __exit__( # pylint: disable=redefined-outer-name,unused-variable,redefined-builtin
self, type: Any, value: Any, traceback: TracebackType
) -> None:
try:
# signal.alarm(0)
pass
except ValueError as ex:
logger.warning("timeout can't be used in the current context")
logger.exception(ex)
参考文档:https://blog.csdn.net/qq_43887455/article/details/107351328