我正在运行Python 2.7并在linux 64位操作系统上使用cx_Oracle。我需要能够针对11.2或12.1 Oracle客户端运行,因为我无法确定将在已部署的目标上安装哪个客户端。我知道有针对每个Oracle客户端构建的cx_Oracle。我怎样才能确定该应用程序是否有效?我应该提到我正在使用pyinstaller打包应用程序。是否有针对两个Oracle客户端构建的cx_Oracle版本,或者我需要有两个不同版本的应用程序...一个用于11g,一个用于12c客户端?
答案 0 :(得分:1)
虽然理论上您应该能够构建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。