一、背景
安装redash的时候,会依赖到 ibm-db这个包,本身这个包只有 642kb大小,但是安装确及其的慢,而且无论切换到国内那个镜像地址 都无法解决
没办法,只能看看 这个包的源码了,我们先从清华的镜像地址下载这个包 https://pypi.tuna.tsinghua.edu.cn/packages/98/cb/f77d9bd5f64246074af364cc30e20e3044c533890f3b67d30e89615c2fc5/ibm_db-3.0.1.tar.gz
解压到自己电脑上,并打开 setup.py文件,查找原因,发现在第181行代码处,有个逻辑:
大概意思就是,当不存在clidriver目录的时候,就去这个地址:
https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/
下载指定的驱动文件
算是找到原因了,即 ibm-db这个包在安装过程中 会去 上面这个地址下载驱动文件,安装慢的原因就是一直在等待驱动文件的下载,我们打开这个地址,选择一个下载看看:
二、解决方案
问题找到了,如何解决呢?
我们就不能依赖 pip install ibm-db 这个命令来安装了,只能自己手动来执行安装
具体思路是,自己提前先将两个文件都下载下来
ibm-db_3.0.1.tar.gz 包文件 以及 linuxx64_odbc_cli.tar.gz 驱动文件
然后将驱动文件解压到 包文件的目录下面,手动执行
python setup.py install
三、实施过程
1.在服务器 或本地 提前下载好两份文件,放到执行目录下
wget https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/linuxx64_odbc_cli.tar.gz
2.下载完成之后,解压包
tar -zxvf ibm_db-3.0.1.tar.gz
tar -zxvf linuxx64_odbc_cli.tar.gz -C ibm_db-3.0.1/ #解压到 ibm_db包目录下
驱动文件解压 刚好目录就是 clidriver,解压完成之后的目录状况:
3.执行python 命令安装包
python3 setup.py install
等待安装完成即可,中间会处很多warning,影响不大,同时不要下错驱动包,windows 下载Windows驱动包,mac的下载mac对应的
四、redash docker容器里面安装
上面说了如何手动安装 ibm-db包,但是redash是自动到docker 容器里面安装的,不好手动干预,所以这里我们直接修改 redash项目下的 Dockerfile文件,添加相应的语句
# 把两个包 copy到 容器里面
COPY packages/ibm_db-3.0.1.tar.gz packages/linuxx64_odbc_cli.tar.gz ./
# 解压 包
RUN tar -zxvf ibm_db-3.0.1.tar.gz
# 将驱动程序解压到包 目录内
RUN tar -zxvf linuxx64_odbc_cli.tar.gz -C ibm_db-3.0.1/
#切换工作目录 到 包目录内
WORKDIR /app/ibm_db-3.0.1
#执行 安装命令
RUN python setup.py install
#将工作目录切换回来
WORKDIR /app