cx-oracle pyinstaller打包输出趟的坑

python连接oracle数据库需要import cx_oracle,安装引入的坑就先不写了,主要记一下通过pyinstaller打包成exe的坑。

我通过pyinstaller -F -w Insert.py打包生成exe后,在本机运行正常,但是拷贝到其他电脑,就报错。由于上周解决的,现在才来写,有些环节记不清了,报错也有过几种情况。

Traceback (most recent call last):

File "Insert.py", line 12, in

ImportError: DLL load failed: 找不到指定的模块。

[7672] Failed to execute script 'Insert' due to unhandledexception!

还有cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle的报错

网上百度了好几天,最后通过下面方法解决。

首先,拷贝到的新电脑,需要安装visoal运行库,网上下载安装一下。我是用了同事给的个VisualCppRedist_AIO_x86_x64_v55.rar。

Oracle Instant Client libraries需要VC环境,并匹配对应的位数和版本,对应关系如下:

For Instant Client 18 or 12.2 install VS 2013

For Instant Client 12.1 install VS 2010

For Instant Client 11.2 install VS 2005 64-bit or VS 2005 32-bit

然后就是pyinstaller看起来并不会将动态链接库自动打包,所以我们需要告诉pyinstaller要打包哪些动态链接库,步骤如下(假设python文件名为  Insert.py):

1. 使用pyinstaller -F Insert.py 打包后会生成一个 Insert.spec文件,我们要修改这个spec文件。

将 a.binaries, 改为

a.binaries+[('oraociei12.dll','D:\\app\\client\\Administrator\\product\\12.2.0\\client_1\\instantclient\\oraociei12.dll','BINARY'),('oci.dll','D:\\app\\client\\Administrator\\product\\12.2.0\\client_1\\bin\\oci.dll','BINARY'),('oraons.dll','D:\\app\\client\\Administrator\\product\\12.2.0\\client_1\\bin\\oraons.dll','BINARY')],

以上路径需要参照oracle instantclient、bin目录中各文件的路径进行修改。

2. 依照spec文件打包,执行命令如下:

pyinstaller -F  Insert.spec

我用的是pyinstaller -D Insert.spec命令,感觉应该差不多。但是运行后除了界面还会带个黑框,这个修改一下Insert.spec文件中的

console值,修改为console=False。

我是通过以上步骤成功打包出程序,然后拷贝到新的电脑后可以运行。今天写可能记不了那么清楚,如果有不当的地方,请见谅。


参考链接:https://www.cnblogs.com/vanwoos/p/12020727.html

https://blog.csdn.net/cuidai4743/article/details/100332152

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容