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相關模組正常。
********************************************************天道酬勤*************************************************************