【问题标题】:cx_Oracle with multiple Oracle client versions具有多个 Oracle 客户端版本的 cx_Oracle
【发布时间】:2016-09-09 02:34:49
【问题描述】:

我正在运行 Python 2.7,并在 linux 64 位操作系统上使用 cx_Oracle。我需要能够针对 11.2 或 12.1 Oracle 客户端运行,因为我无法确定哪个客户端将安装在已部署的目标上。我知道有针对每个 Oracle 客户端构建的 cx_Oracle。我如何确定该应用程序可以正常工作?我应该提到我正在使用 pyinstaller 来打包应用程序。是否有针对两个 Oracle 客户端构建的 cx_Oracle 版本,或者我需要有两个不同版本的应用程序...一个用于 11g,一个用于 12c 客户端?

【问题讨论】:

    标签: python python-2.7 cx-oracle


    【解决方案1】:

    虽然理论上您应该能够构建 cx_Oracle 的 Oracle 11g 版本并将其与 Oracle 11g 和 Oracle 12c 客户端一起使用,但我不推荐它。如果您能够说服您的用户使用最简单的 Oracle 12c 即时客户端。该客户端能够毫无困难地访问 11g 和 12c 数据库。但如果这不可能,另一种选择如下:

    1) 为 11g 和 12c 编译 cx_Oracle,并将两个副本放在名为(例如)cx_Oracle_11g.so 和 cx_Oracle_12c.so 的安装中。

    2) 使用如下代码动态导入 cx_Oracle:

    for version in ("11g", "12c"):
        fileName = os.path.join(installDir, "cx_Oracle_%s.so" % version)
        try:
            module = imp.load_dynamic("cx_Oracle", fileName)
            break
        except ImportError:
            pass
    

    3) 以与以前相同的方式在任何需要的地方使用动态导入的模块。由于动态加载的模块名为 cx_Oracle,您应该能够以常规方式将其导入其他代码中,它会找到您动态加载的模块。

    4) 使用 cx_Oracle 6.x,它同时支持任何 Oracle Client 11.2、12.1 和 12.2。

    【讨论】:

      猜你喜欢
      • 2018-09-10
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2019-04-30
      相关资源
      最近更新 更多