Python打包cx_Oracle模块后报错ORA-01804

一,背景
公司启用了堡垒机,每次连接数据库都必须先登录堡垒机,然后连接PL/SQL快应用,关键是网速不够,分辨率也很差,取得主管同意后就自己用Python写了一个快速查询oracle的工具

二,问题
代码是可以正常跑的,但是在用pyinstaller打包后测试时发现只有部分电脑可以正常运行,还有些会报错,报错内容为Error while trying to retrieve text for error ORA-01804

三,探寻之旅
苦苦思寻无果,只能问道百度,发现很多人遇到这个报错,总结了一下,最多的案例是修改环境配置的顺序和保持版本一致, 但这些都不能解决我这个问题,因为我的目标是可以在公司任意一台电脑直接使用程序,做不到每一台电脑都配置环境变量(其实也不知道咋配),至于保持版本一致,公司都是统一安装的oracle,版本是没有问题的。实在没办法了,来这里求解,还请解惑,感激不尽!

要用cx_oracle , 客户端是要的。 环境变量是要设置的。
简单来说,就是一个目录, 还有环境变量设置
大概就这些 , 那个字符集按实际的改

一共设置以下三个系统环境变量(以解压缩目录d:\ora10g为例) 

环境变量名                              变量值 
path                                 %PATH%;D:\ora10g
TNS_ADMIN                            D:\ora10g 
NLS_LANG                             SIMPLIFIED CHINESE_CHINA.ZHS16GBK 

tnsnames.ora文件直接放在d:\ora10g目录下即可。

cx_Oracle是需要oracle的instantclient客户端的,在连接到数据库之前,会访问操作系统的环境变量,来获取oracle客户端所在路径,并加载相关的动态库文件。
如果想要让你的程序不依赖用户电脑上的oracle客户端,那么你的程序就要把oracle的客户端文件夹也一起打包好,并且在python程序启动时进行初始化,动态识别当前程序路径,将该路径下的oracle客户端路径作为临时环境变量,
需要设置的环境变量有
ORACLE_HOME 你的instantclient文件夹
TNS_ADMIN tnsnames.ora文件所在的文件夹