python exe cx_Oracle: unable to acquire oracle environment handle问题解决

解决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')],

python exe cx_Oracle: unable to acquire oracle environment handle问题解决_第1张图片

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相关模块正常。

********************************************************天道酬勤*************************************************************

你可能感兴趣的:(Python)