解决pip安装ibm-db过慢问题(包中包)

一、背景

    安装redash的时候,会依赖到 ibm-db这个包,本身这个包只有 642kb大小,但是安装确及其的慢,而且无论切换到国内那个镜像地址 都无法解决

解决pip安装ibm-db过慢问题(包中包)_第1张图片
卡在这个包久久无法动弹

没办法,只能看看 这个包的源码了,我们先从清华的镜像地址下载这个包 https://pypi.tuna.tsinghua.edu.cn/packages/98/cb/f77d9bd5f64246074af364cc30e20e3044c533890f3b67d30e89615c2fc5/ibm_db-3.0.1.tar.gz

解压到自己电脑上,并打开 setup.py文件,查找原因,发现在第181行代码处,有个逻辑:

解决pip安装ibm-db过慢问题(包中包)_第2张图片

大概意思就是,当不存在clidriver目录的时候,就去这个地址:

https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/

下载指定的驱动文件

算是找到原因了,即 ibm-db这个包在安装过程中 会去 上面这个地址下载驱动文件,安装慢的原因就是一直在等待驱动文件的下载,我们打开这个地址,选择一个下载看看:

解决pip安装ibm-db过慢问题(包中包)_第3张图片
20M的文件要下载1个多小时

二、解决方案

问题找到了,如何解决呢?

我们就不能依赖 pip install ibm-db 这个命令来安装了,只能自己手动来执行安装

具体思路是,自己提前先将两个文件都下载下来

ibm-db_3.0.1.tar.gz 包文件  以及 linuxx64_odbc_cli.tar.gz 驱动文件

然后将驱动文件解压到 包文件的目录下面,手动执行

python setup.py install

三、实施过程

    1.在服务器 或本地 提前下载好两份文件,放到执行目录下

 wget  https://pypi.tuna.tsinghua.edu.cn/packages/98/cb/f77d9bd5f64246074af364cc30e20e3044c533890f3b67d30e89615c2fc5/ibm_db-3.0.1.tar.gz        

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


解决pip安装ibm-db过慢问题(包中包)_第4张图片
Dockerfile修改内容

你可能感兴趣的:(解决pip安装ibm-db过慢问题(包中包))