cx_oracle版本,python – 将cx_Oracle部署到各种版本的Oracle Client上

我有一些使用cx_Oracle连接到Oracle数据库的小型python应用程序.我通过使用py2exe编译它们来部署这些应用程序,这在许多情况下都可以正常工作.

问题是,在许多需要安装它的人中没有标准的Oracle客户端版本(例如9i和10g),尝试让每个人都在单个Oracle客户端版本上进行标准化会非常令人沮丧.我目前正在使用带有cx_Oracle 4.4.1 for 9.2i的9.2客户端,所以当我py2exe时,生成的exe包含cx_Oracle 4.4.1库,不适用于10g客户端.

我没有使用任何Oracle版本的任何特定功能,因此除了cx_Oracle兼容性问题之外,我没有理由关心正在使用的客户端版本.

理想的解决方案是以某种方式编译一个完全独立于机器上安装的Oracle客户端的版本.

如果那是不可能的,我愿意为每个主要的Oracle版本(my_app_9i.exe,my_app_10g.exe等)编译单独的exes,但是我无法想出一个简单的方法甚至这样做,因为安装新的cx_Oracle会覆盖我的旧版本,每当我做出改变时,我都要不断地来回交换库来编译其他版本.

欢迎任何建议或其他选择.

解决方法:

如果你想构建多个cx_Oracle版本(例如:cx_Oracle10g,cx_Oracle11g等),那么你需要修改cx_Oracle setup.py脚本.脚本的最后一步是调用setup();第一个参数是要构建的模块的名称.您需要做的就是将“cx_Oracle”更改为“cx_Oracle”ver,其中ver为10g,11g等.创建多个脚本并对其进行硬编码,或者向setup.py添加另一个参数以动态选择它.

当然,一旦你有了这个,你需要一种机制来在运行时加载正确的模块.为此,您需要创建自己的cx_Oracle模块,其中包含__init__.py文件,如下所示:

try:

from cx_Oracle9g import *

except ImportError:

try:

from cx_Oracle10g import *

except ImportError:

try:

from cx_Oracle11g import *

您需要做的就是将您的自定义cx_Oracle模块以及正确的cx_OracleXg模块与您的应用程序一起发送.

或者,您可以让自定义cx_Oracle模块动态检查每个可用的Oracle客户端库(9g,10g,11g等),然后只导入正确匹配的cx_OracleXg模块.在这种情况下,您只需要发送一个二进制文件,其中包含您的自定义cx_Oracle模块以及所有cx_OracleXg模块.

标签:py2exe,python,oracle,cx-oracle,instantclient

来源: https://codeday.me/bug/20191009/1876012.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值