本文旨在解决superset不支持windows系统环境开发调试等问题,在官方文档中,写到Windows时,需要在虚拟机里搭建Ubuntu来使用,官方是不支持Windows本地开发的。曲线救国,使用pycharm的远程调试功能实现代码在服务器上运行,Windows本地开发,同步。主要步骤:
-
准备机器及开发运行环境 -
配置pycharm远程解释器 -
安装后端依赖 -
安装前端依赖&编译 -
代码改造&debug -
汉化
准备机器及开发运行环境
在这里使用了虚拟机VMware,安装centos7(为了开发和部署的环境一致),也可购买云服务器或公司机房服务器。机器上面需要安装
sudo yum install gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel cyrus-sasl-devel openldap-devel
特别地,如果需要使用mysql 而不是自带的sqlite ,需要安装
yum install mysql-devel
否则,待会安装falsk app后端依赖----mysqlclient==1.4.2.post1 时可能会报如下错误:
安装python及python虚拟环境
centos自带了python2.7,但我们需要使用python 3.7以上,可以卸载掉自带的2.7 替换掉,也可以安装3并存 我使用anaconda,安装比较方便
curl -O https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.07-Linux-x86_64.sh
./Anaconda3-2019.07-Linux-x86_64.sh
安装过程中会提示安装位置,直接回车默认默认位置 /root/Anaconda3 安装成功后直接软连接到 /usr/bin/pyhton (也可以配置环境变量)
ln -s(f) /root/anaconda3/bin/python /usr/bin/python(3)
ln -s(f) /root/anaconda3/bin/pip /usr/bin/pip(3)
我选择了直接暴力覆盖,这时候会影响之前依赖python2.7的应用,比如 yum ,需要修改yum文件
vim /usr/bin/yum
将文件头
#!/usr/bin/python
改为
#!/usr/bin/python2.7
如果其他组件报错也可使用此方法修改 当然,也可以软连接的时候用python3。可以不用再修改这些应用的文件头。安装虚拟环境方便各个项目不同环境版本切换,强烈建议使用虚拟环境
python -m venv /root/dev/envs/superset_env
执行成功后即可在此路径下创建一个python虚拟环境
如不能执行虚拟环境的命令需要安装
pip install virtualenv
创建好虚拟环境后激活
source /root/dev/envs/superset_env/bin/activate
激活好后命令行会变为 (环境名)[username@hostname path ] #
安装node
可以直接 yum install nodejs , 但我看到他要安装的版本比较低,便选择了从官网下载安装最新稳定版
wget https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz
xz -d node-v14.16.0-linux-x64.tar.xz
tar -xf node-v14.16.0-linux-x64.tar.xz
安装成功后直接软连接到 /usr/bin/node (也可以配置环境变量)
ln -s nodepath/bin/node /usr/bin/node
ln -s nodepath/bin/npm /usr/bin/npm
注意:软连接时必须为自己实际路径的全路径,不能用相对路径
node -v
npm -v
版本正常打印便说明安装成功
待会安装前端依赖时可能会很慢,这里配置一下全局淘宝源
npm config set registry https://registry.npm.taobao.org
配置完后查看一下是否成功
npm get registry
配置pycharm远程解释器
前面已经生成好了python的虚拟环境 superset_env 现在下载代码到机器
cd /root/dev
git clone https://github.com/apache/superset.git
打开本地 pycharm 新建一个项目 本地路径下 如 D:\DEV\superset_remote 点开解释器,选择已经存在的解释器
在ssh interpreter选项中填写远程服务器的地址和用户名。点击下一步在弹出的窗口中找到刚才生成的虚拟环境的python的位置 点击 finish 回到这里将远程项目地址的路径修改为刚刚下载代码的地址 /root/dev/superset 然后点击create就可以了 进入后 点击 「tools > deployment > configuration」进行配置
比如编码格式,映射关系,忽略的文件等, 这时,便可以从服务器同步代码到本地
安装后端依赖
在pycharm打开一个终端 ssh到远程服务器(也可在刚才的xshell终端中) 在这边比较方便查看目录结构 激活superset_env cd 到superset目录
安装依赖
pip install -r requirements/local.txt
开发模式安装
pip install -e .
创建管理员用户
superset fab create-admin
初始化数据库
superset db upgrade
创建默认角色和权限
superset init
加载演示的实例数据
superset load_examples #此处不科学上网的话会非常容易time out,如果不需要示例数据也可以跳过此步骤
启动后端(Dev server)
FLASK_ENV=development superset run -p 8088 --with-threads --reload --debugger
此处pip 可以加上 -i https://pypi.tuna.tsinghua.edu.cn/simple 使用清华源,也可直接全局配置pip 使用清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install --upgrade pip
安装前端依赖&编译
cd superset-frontend
安装前端依赖
npm ci
在watch mode 构建 dev assets ,当代码改变时自动重新构建
npm run dev
----------
也可以直接运行自带的js_build.sh
编译时可能报错Error from chokidar (/..../...): Error: ENOSPC: System limit for number of file watchers reached, 执行下面语句,修改限制。
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
代码改造
前端编译完成后即可直接在服务器上启动(FLASK_ENV=development superset run -p 8088 --with-threads --reload --debugger),但是如果想在本地使用pycharm调试 ,需要对代码进行改造
-
在superset/superset 新建run.py
from superset import create_app
if __name__ == '__main__':
app = create_app()
app.run(host='0.0.0.0', port=8088, debug=True)
# host 要写,否则默认127.0.0.1 无法在本地访问 并且需要关闭防火墙 systemctl status(stop) firewalld
直接运行会报错
需要将superset目录中的typing.py文件重命名为superset_typing.py,该文件的名称与python3的模块的名称相同了,如果不修改的话会导致这个错误,shift+F6重命名,pycharm会自动更新引用的位置。重命名后,把修改过的这两个文件 upload到服务器,打上断点(可选) ,点击debug 即可远程启动,本地调试。
汉化
在这个目录:superset/superset/translations 下存放着各个语言包 打开superset/superset/config.py
将 BABEL_DEFAULT_FOLDER 改为 zh 重新编译文件夹
pybabel compile -d ~/translations
编译成功后 重新启动即可汉化,如果需要更深度的汉化效果,需要在 superset、superset/translations/zh/LC_MESSAGES/messages.po 此文件中添加翻译映射,重新编译为 .mo 文件即可。