解决python使用pyinstall打包包含cx_Oracle模块的exe文件在别的机器上执行报 cx_Oracle: unable to acquire oracle environment handle问题
1.pyinstaller -F test.py 生成test.spec文件;
2.对生成的test.spec中添加cx_Oracle所需的oracle客户端dll文件;(instantclient_11_2位数一定要和python以及cx_Oracle匹配)
a.binaries+[('oci.dll','G:\\instantclient_11_2\\oci.dll','BINARY'),('oraociei11.dll','G:\\instantclient_11_2\\oraociei11.dll','BINARY')],
3.使用pyinstaller -F test.spec 打包即可包含cx_oracle所需动态链接库,相应生成的exe文件也比不包含dll的大,即可在无python环境上执行。
前期cx_Oracle问题排查方向:
1.python版本和安装的cx_Oracle的位数要一致,比如32位python要安装cx_Oracle_XX-XX_win32_pyXX;
2.cx_Oracle位数及版本要和Oracle客户端instantclient位数及版本一致,例如1instantclient_11_2,cx_Oracle_XX-11g_win32_pyXX;
3.配置环境变量
右键计算机-属性-高级系统设置-环境变量-系统变量-新建
变量:ORACLE_HOME 值:G:\\instantclient_11_2
变量:TNS_ADMIN 值:G:\\instantclient_11_2
path添加 G:\\instantclient_11_2
4.配置好后,eclipse或者命令行,
import cx_Oracle
DLL load failed: %1 不是有效的 Win32 应用程序
此情况属于Oracle客户端instantclient位数和cx_Oracle位数不一致,但不需要和oracle服务端位数一致。
import cx_Oracle
ImportError: DLL load failed: 找不到指定的模块。
此情况需将Oracle客户端instantclient下的oci.dll文件拷贝到Lib\site-packages 目录下,再次 import cx_Oracle查看是否报错。
若无报错,则运行cx_Oracle相关模块正常。
********************************************************天道酬勤*************************************************************