首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同版本的Oracle客户端上部署cx_Oracle

在不同版本的Oracle客户端上部署cx_Oracle
EN

Stack Overflow用户
提问于 2010-07-28 07:54:42
回答 1查看 3.5K关注 0票数 2

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

问题是,许多需要安装它的人都没有标准的Oracle客户端版本(例如9i和10g ),试图让每个人都在一个Oracle客户端版本上实现标准化将是非常令人沮丧的。我现在使用的是9.2客户端和cx_Oracle 4.4.1 for 9i,所以当我使用py2exe时,生成的exe包含cx_Oracle 4.4.1库,不能与10g客户端一起使用。

我没有使用任何Oracle版本的任何特定特性,所以除了cx_Oracle兼容性问题之外,我真的没有理由关心所使用的客户端版本。

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

如果这不可能,我愿意为每个主要的甲骨文版本(my_app_9i.exe,my_app_10g.exe等)编译单独的cx_Oracle,但我想不出一个简单的方法来做到这一点,因为安装一个新的exe会覆盖我的旧版本,每当我进行更改时,我就必须不断地交换这个库来编译其他版本。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-02 06:01:03

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

当然,一旦你得到了它,你就需要一种机制来在运行时加载正确的模块。为此,您需要创建自己的cx_Oracle模块,该模块具有如下所示的__init__.py文件:

代码语言:javascript
复制
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模块。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3348894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档