安装Python3.6

安装Python3.6可能需要的依赖:

1
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel xz-devel

官网下载最新的3.6.x.tgz包,本文写作时最新的是Python-3.6.13.tgz,解压到/usr/local目录下并进入目录:

1
2
tar -xzvf Python-3.6.13.tgz -C  /usr/local
cd /usr/local/Python-3.6.13

切换到root账户操作(用普通用户在make install时有可能出现权限不够而无法创建文件的报错,就算加上sudo也不行!):

1
su root

把Python3.6安装到指定目录下:

1
2
./configure --prefix=/usr/local/python3.6.13
make && make altinstall

如果使用make install,在系统中将会有两个不同版本的Python在/usr/bin/目录中。这将会导致很多问题,而且不好处理。在本来存在多个版本的python情况下建议后面手动配置环境变量和软链接。

建立新的软链接,使python3指向Python-3.6.13:

1
ln -s /usr/local/python3.6.13/bin/python3.6 /usr/bin/python3

在终端中输入python3测试:

1
2
3
4
5
[root@cpu-node1 local]# python3
Python 3.6.13 (default, Mar 2 2021, 14:25:15)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

或者加上-V检查版本:

1
2
[root@cpu-node1 local]# python3 -V
Python 3.6.13

创建pip软链接:

1
ln -s /usr/local/python3.6.13/bin/pip3.6 /usr/bin/pip3

检查pip3命令:

1
2
[root@cpu-node1 local]# pip3 -V
pip 18.1 from /usr/local/python3.6.13/lib/python3.6/site-packages/pip (python 3.6)

安装成功。

至于要不要把系统默认的python命令指向python3.6,个人从维稳的角度来说没有这个需要。要改的话可以参考:CentOS7安装Python3.6,改完软链接之后还需要改一堆依赖于python2.7的系统文件。

安装OS依赖

1
2
sudo yum upgrade python-setuptools
sudo yum install gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel cyrus-sasl-devel openldap-devel

搭建Python虚拟容器

官方文档&众多教程强烈建议把Superset搭建在一个隔离的虚拟容器virtualenv里,virtualenv的具体原理参考virtualenv - 廖雪峰的官方网站(不要参考里面的安装步骤,会装到python2里去)。

另外virtualenv与anaconda的区别:

virtualenv是针对项目管理的,比如web项目,每个项目的环境依赖都是独立的,所以必须用virtualenv去管理。anaconda不算虚拟环境管理,它只是集合了一些常用的数据分析的库,就是把数据分析的一些必备的库都给你准备好了,不用你去分别安装而已,跟虚拟环境不是一个概念的工具。

所以,在平时的开发环境中可以使用anaconda,特别是要做数据分析,这样会方便很多。但是在做一些独立的项目,比如Django和flask这种web的时候就必须用到virtualenv了,平时是不需要用到的。

首先用python3.6对应的pip3安装virtualenv:

1
pip install virtualenv

新建Superset的工作目录并进入:

1
2
mkdir superset_project
cd superset_project/

创建一个独立的Python运行环境,命名为Superset

1
python3 -m venv superset

在superset_project的目录下会多出一个名为superset的文件夹。查看site-packages文件夹发现环境确实很干净:

1
2
3
4
5
6
7
8
9
[hadoop@cpu-node1 superset_project]$ ll superset/lib/python3.6/site-packages/
总用量 8
-rw-rw-r-- 1 hadoop hadoop 126 3月 2 16:36 easy_install.py
drwxrwxr-x 5 hadoop hadoop 119 3月 2 16:36 pip
drwxrwxr-x 2 hadoop hadoop 162 3月 2 16:36 pip-18.1.dist-info
drwxrwxr-x 5 hadoop hadoop 118 3月 2 16:36 pkg_resources
drwxrwxr-x 2 hadoop hadoop 41 3月 2 16:36 __pycache__
drwxrwxr-x 6 hadoop hadoop 4096 3月 2 16:36 setuptools
drwxrwxr-x 2 hadoop hadoop 170 3月 2 16:36 setuptools-40.6.2.dist-info

激活虚拟环境,进入superset的容器环境:

1
. superset/bin/activate

可以看到终端左侧多了一个(superset),通过which发现在该环境里python和pip确实指向了项目下的对应命令:

1
2
3
4
5
6
(superset) [hadoop@cpu-node1 superset_project]$ which python3
~/superset_project/Superset/bin/python3
(superset) [hadoop@cpu-node1 superset_project]$ which pip3
~/superset_project/Superset/bin/pip3
(superset) [hadoop@cpu-node1 superset_project]$ pip3 -V
pip 18.1 from /home/hadoop/superset_project/Superset/lib/python3.6/site-packages/pip (python 3.6)

可以在终端输入命令deactivate退出该容器环境。

安装并初始化Superset

在已激活的容器环境下操作:

升级pip到最新版:

1
pip3 install --upgrade pip

pip安装Superset:

1
pip3 install apache-superset

带上apache开头,官方会把superset的所有python依赖包都一并下好。

安装成功后,需要初始化数据库:

1
superset db upgrade

如果是python3.6版本会报一个错:ModuleNotFoundError: No module named 'dataclasses'官方解释是这个包默认python3.7自带,在3.6作为补丁需要额外安装(所以apache默认superset其实是用在了3.7或更高的版本),装就完事了:

1
pip3 install dataclasses

重新初始化数据库成功。

创建admin用户:

1
2
export FLASK_APP=superset
superset fab create-admin

然后要输入这些东西,做好心理准备:

1
2
3
4
5
6
7
8
9
(superset) [hadoop@cpu-node1 superset]$ superset fab create-admin
Username [admin]: hadoop
User first name [admin]: WST
User last name [user]: hadoop
Email [admin@fab.org]: WSThadoop@hust.edu.cn
Password:
Repeat for confirmation:
Recognized Database Authentications.
Admin User hadoop created.

下载样例数据(可选):

1
superset load_examples

Superset环境初始化:

1
superset init

启动开发模式web页面:

1
superset run -p 8088 -h cpu-node1 --with-threads --reload --debugger

其中-p用来确定端口号,-h指定IP。若是服务器部署的话记得需要在防火墙里将这个端口开放,并且在对外跳板机上的Nginx中作转发。然后通过浏览器就可以访问web页面了。

消除Warning

缺少lzma的warning

1
2
/home/hadoop/superset_project/superset/lib/python3.6/site-packages/pandas/compat/__init__.py:120: UserWarning: Could not import the lzma module. Your installed Python is incomplete. Attempting to use lzma compression will result in a RuntimeError.
warnings.warn(msg)

如果在安装Python的第一步装好了xz-devel是不会出现这个告警的。解决方法有两种:

  • 用yum装上这个玩意并重新编译Python,只要编译的目标文件夹和软链接没动过的话就万事大吉,编译完成之后直接重开superset就没有告警信息了,参考
  • 用pip装上补丁包,改site-packages里的.py源码import部分,参考。不过在Python3.6环境下没有lzma.py这个文件,没搞定。

Flask-Caching的UserWarning

参考

1
2
/home/hadoop/superset_project/superset/lib/python3.6/site-packages/flask_caching/__init__.py:192: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled.
"Flask-Caching: CACHE_TYPE is set to null, "

找到python3.6/site-packages/superset/config.py打开编辑:

1
2
3
4
5
6
7
- THUMBNAIL_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
+ THUMBNAIL_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null", "CACHE_NO_NULL_WARNING": True}

- CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
- TABLE_NAMES_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
+ CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "simple"}
+ TABLE_NAMES_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "simple"}

pillow包没有安装

干净的site-packages环境+apache自动安装的包列表里确实没有pillow包,然后告警:

1
2
No PIL installation found
INFO:superset.utils.screenshots:No PIL installation found

装上就行:

1
pip3 install pillow

参考