1. 程式人生 > >python exe cx_Oracle: unable to acquire oracle environment handle問題解決

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

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相關模組正常。

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