使用pyinstaller打包成exe之后运行闪退,调试后报出 Unable to acquire Oracle environment handle错误解决方法

不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!!


使用pyinstaller怎么打包我就不多说了,网上可以搜到很多实用的答案.

这里简单阐述下情况:

我想要做的是使用Python操作oracle数据库,对数据库进行CRUD.

代码在pycharm工具和cmd命令下运行是没有任何异常的,可以一打包成exe可执行文件之后运行它就出现了闪退看不到任何报错信息,一开始我以为是代码的原因,就回头审查了下代码,感觉没有错误呀,而且使用工具和在命令行下运行都没有任何的错误为什么打包exe就出现闪退了呢,找了好久自己没能解决之后于是就在网上搜答案,看都有人说把很可能出错的代码try 起来,就会的得到错误消息,可以帮助排错,于是照做了,下面是示例:

try:
    #这里写你很可能出错的代码
except Exception,e:
    #打印报错原因
    print str(e)
    #让程序停在这里等待回车键退出
    raw_input('Please press enter key to exit ...')

按照上面try起来之后,再打包成exe执之后有错误出现了,报错:  Unable to acquire Oracle environment handle  如下图

使用pyinstaller打包成exe之后运行闪退,调试后报出 Unable to acquire Oracle environment handle错误解决方法_第1张图片


我就郁闷了打包的时候打包工具不是应该所有的模块都打包进去的吗?为什么会报错这样的错误呢,于是又是各种百度呀,百度上有很多关于 :Unable to acquire Oracle environment handle的答案,什么把客户端的所有的 .dll文件拷贝到python安装目录下的Lib\ site-packages目录下,什么配置环境什么的,也许对他们有用但是我试了又试没有一个答案可以解决我的问题虽然报错的信息是一样的,又是各种尝试各种解决办法,还是没有用,于是我就从打包的工具入手,想着是不是因为打包工具的原因导致的,然后就开始使用Python的另一种打包工具cx_freeze,没想到的是同样的代码,没有做任何的修改得情况下用它打包再执行竟然没有报错,这是我就想着网上用pyinstaller打包的人也挺多的呀为什么用它不行用cx_freeze打包反而可以了呢?反正就是怎么想也想不通,也不死心,心理觉得不解决它总是不爽总有什么搁着的样子,于是又是各种尝试,各种查资料,还是没有结果.


直到上个星期某一天中午上洗手间时想到自己安装cx_Oracle时把oracle客户端(关于下载 oracle客户端可以参考我另一篇文章http://blog.csdn.net/hui_2016/article/details/76229276)的所有.dll文件拷到python安装目录下的Lib\ site-packages目录下,是不是因为pyinstaller打包的时候没有将其打包上去才会报出这样的错误呢?于是就将oracle客户端的.dll文件全部拷到跟exe程序同一级目录下, 如下图:

使用pyinstaller打包成exe之后运行闪退,调试后报出 Unable to acquire Oracle environment handle错误解决方法_第2张图片

我时使用了 pyinstaller 文件名.py 命令来打包的所以会出现这么多东西,如果使用 pyinstaller -F 文件名.py 这个命令就不会出现这么多东西了,只有一个exe文件而已.

考完之后再执行exe程序,结果没有闪退了,也没有报错,一切正常 如下图:

使用pyinstaller打包成exe之后运行闪退,调试后报出 Unable to acquire Oracle environment handle错误解决方法_第3张图片


(后面想了想跟之前网上搜过的答案有点相似,只是没有想到pyinstaller没有将dll文件打包进去)


奇怪的是这几天我同样使用了pyinstaller打包同样的代码(就还是上面所说的代码),不用将dll文件放到exe同级目录下也是可以的了,不过搭建的环境不太一样,Python使用的是2.7.13 x64的,Oracle是11gx64的,cx_Oracle也是对应Python2.7x64的,客户端也是10gx64的,唯一变得是Oracle数据库,我就想着难道是Oracle数据库版本不同的原因导致的?反正就是各种猜想,后面也经过测试得出结论:

所有需要用到的资料最好版本位数都相一致,这样会减少很多不必要的bug,当然也不排除上面所说的将dll文件放到exe同级目录中去是可以解决pyinstaller打包少东西的问题,如果pyinstaller打包不成功也是可以用cx_freeze去打包的,反正就是可以多方面尝试去解决问题,这样获取能让自己更好的理解和扩展



如果大家遇到相同的问题还有其他的解决方案欢迎大家留言告知,相互学习!!!


如果此文章有什么不对的地方请路过的大神指出,以免误人子弟


尊重原创,如要转载请注明出处

你可能感兴趣的:(问题解决,Python)