我正在运行 Python 2.7,并在 Linux 64 位操作系统上使用 cx_Oracle。我需要能够针对 11.2 或 12.1 Oracle 客户端运行,因为我无法确定哪个客户端将安装在部署的目标上。我知道有针对每个 Oracle 客户端构建的 cx_Oracle。我如何确定该应用程序可以正常工作?我应该提到我正在使用 pyinstaller 来打包应用程序。是否有针对两个 Oracle 客户端构建的 cx_Oracle 版本,或者我是否需要拥有两个不同版本的应用程序……一个用于 11g,另一个用于 12c 客户端?
尽管理论上您应该能够构建 Oracle 11g 版本的 cx_Oracle 并将其与 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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)