如何使用pyinstaller构建cx_oracle应用程序以使用多个Oracle客户端版本?

时间:2016-09-05 05:04:42

标签: python oracle pyinstaller cx-oracle

我正在使用cx_Oracle(v5)和Pyinstaller在Python中构建一个应用程序来打包和分发应用程序。当我构建和打包应用程序时,我安装了Oracle 12c客户端。但是,当我将它部署到安装了11g客户端的计算机上时,似乎无法正常工作。我收到消息“无法获取Oracle环境句柄”。我假设这是因为我的ORACLE_HOME指向12c客户端时,应用程序与Pyinstaller一起打包。我知道我所拥有的cx_Oracle是针对11g和12个库构建的。所以,我想知道如何使用Pyinstaller部署应用程序,以便它可以安装11或12c客户端库运行?

顺便说一下,我在Linux(debian / Mint 17.2)上构建它,并部署到Linux(CentOS 7)。

1 个答案:

答案 0 :(得分:1)

错误"无法获取Oracle环境句柄"表示您的Oracle配置有问题。检查您正在使用的libclntsh.so文件。最简单的方法是在PyInstaller与可执行文件捆绑在一起的cx_Oracle模块上使用ldd命令。然后检查是否由于将环境变量ORACLE_HOME设置为其他客户端而发生冲突!

如果PyInstaller在打包过程中拿到了libclntsh.so文件,你需要告诉它停止这样做。目标计算机上必须有一个Oracle客户端(完整客户端或更简单的即时客户端),而不仅仅是一个文件(libclntsh.so)。

您还可以使用目标计算机上的cx_Oracle.so模块建立连接来验证您的配置是否正常 - 与您的应用程序无关。如果由于某些原因不起作用或者您没有安装Python,您也可以使用SQL * Plus来验证您的配置是否正常。