使用pyinstaller打包使用cx_Oracle模块的程序出现The specified module could not be found的问题
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