我正在运行Python 2.7,并在Linux 64位OS上使用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 Instant Client,那将是最简单的。该客户端可以轻松访问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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句