使用Pyinstaller在centos7系统中打包DB2和Oracle

1 介绍

使用pyinstaller对python程序打包是一种常见形式。使用pip方式安装以下相关包,其中sqlalchemy建议安装1.3.13版本。

pip install ibm_db==3.0.4
pip install ibm_db_sa==0.3.6
pip install sqlalchemy==1.3.13
pip install pyinstaller==4.3
pip install cx-Oracle==8.2.1

2 打包DB2

2.1 python版本问题

python包版本建议在3.6.5以上(包括python3.6.5版本),采用3.6.5以下版本会遇到无法识别clidriver驱动问题。

2.2 数据库驱动问题

报错类型:ConnectionError: ibm_db_dbi::Error: [IBM][CLI Driver] SQL10007N Message "0" could not be retrieved.  Reason code: "3". SQLCODE=-1042

解决方法: 在使用pyinstaller打包使用–add_data参数加入CLI Driver驱动。

pyinstaller -F --clean -p='/root/anaconda3/envs/deploy/lib/python3.7/site-packages' --add-data='/root/anaconda3/envs/deploy/lib/python3.7/site-packages/clidriver:./clidriver' tmp.py

2.3 sqlalchemy找不到ibm_db_sa问题

报错类型:sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:ibm_db_sa

解决方法:

1:通过pip show ibm_db_sa找到ibm_db_sa包安装位置,如在我们例子中是/root/anaconda3/envs/deploy/lib/python3.7/site-packages/ibm_db_sa
2:通过pip show sqlalchemy找打sqlalchemy包安装位置,并进入sqlalchemy包下面dialects文件夹。
3:将ibm_db_sa包复制到dialects目录下。具体命令如下:cp -r /root/anaconda3/envs/deploy/lib/python3.7/site-packages/ibm_db_sa /root/anaconda3/envs/deploy/lib/python3.7/site-packages/sqlalchemy/dialects
4: 修改dialects目录下__init__.py文件。在__init__.py文件中__all__变量加入“ibm_db_sa”,如下:__all__ = ( "firebird",  "mssql", "mysql",  "oracle", "postgresql", "sqlite","sybase", "ibm_db_sa")
5:重新打包

3 打包Oracle

3.1 oracle客户端lib库加载进python环境

报错类型:ConnectionError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help

使用python连接oracle数据库时候需要配置一个oracle客户端,不然会遇到上述错误。一般做法是将客户端目录写入环境变量,实际上也可以将oracle客户端lib直接拷贝进python库中从而避免写环境做法。具体做法如下:
1. 下载oracle客户端ininstantclient_18_5.tar.gz并进行解压
2. 将ininstantclient_18_5复制到python环境中lib库中.具体命令如下:cp instantclient_18_5/lib/* /root/anaconda3/envs/deploy/lib

3.2 oracle客户端lib库打包放进打包环境

pyinstaller打包时不能自己识别包依赖的库文件,需要在打包时候自行加入。将oracle客户端lib库随同脚本打包进可执行文件命令如下:
pyinstaller -F --clean --add-binary=“instantclient_18_5/lib/*:.” tmp.py

4 参考

1. Python安装ibm_db连接DB2
2. 离线安装python的ibm_db模块
3. ibm_db,pyinstaller,DLL issue

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值