pyinstaller看起來並不會將動態鏈接庫自動打包,所以我們需要告訴pyinstaller要打包哪些動態鏈接庫,步驟如下(假設python文件名為 oracletest.py):
1. 使用pyinstaller -F oracletest.py 打包后會生成一個oracletest.spec文件,我們要修改這個spec文件。
將 a.binaries, 改為
a.binaries+[('oraociei12.dll','C:\\oracle\\instantclient_12_2\\oraociei12.dll','BINARY'),('oci.dll','C:\\oracle\\instantclient_12_2\\oci.dll','BINARY'),('oraons.dll','C:\\oracle\\instantclient_12_2\\oraons.dll','BINARY')],
以上路徑需要參照oracle instantclient 的存放目錄進行修改。
2. 依照spec文件打包,執行命令如下:
pyinstaller -F oracletest.spec
3.現在打包之后會將動態鏈接庫打包進exe包。因為oracle的這幾個動態鏈接庫非常大,所以導致打包完的exe包也非常大。
以上方法參考stackoverflow的解決方案,經個人實測發現里面提到的動態鏈接庫還不夠,我這里用到的動態鏈接庫如上文所述。
參考鏈接:https://stackoverflow.com/questions/36478831/pyinstaller-cx-oracle-interfaceerror-unable-to-acquire-oracle-environment-hand/36483476