【问题标题】:How do I build a cx_oracle app using pyinstaller to use multiple Oracle client versions?如何使用 pyinstaller 构建 cx_oracle 应用程序以使用多个 Oracle 客户端版本?
【发布时间】:2016-09-07 21:29:57
【问题描述】:

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

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

【问题讨论】:

  • 能否也包含平台信息?
  • 编辑了原始帖子以添加平台信息....在 Mint 17.2 (debian linux) 上构建并部署到 Linux (Centos 7)
  • 我读过的大多数信息都说在 Windows 下会发生这种情况,因为路径包含 OCI.dll 的多个位置。 linux下导致“无法获取Oracle环境句柄”的类比文件是什么?

标签: python oracle pyinstaller cx-oracle


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回复...我可以通过 SQL*Plus 连接,在我的目标机器上没有问题。我在目标上安装了 11 即时客户端并确实看到了 libclntsh.so.11.1 共享对象文件。但是,我仍然得到“无法获取 Oracle 环境句柄。在我的 pyinstaller 可执行文件上运行“ldd”(使用 -F),我得到:linux-vdso.so.1 => (0x00007ffd694f3000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f1055a4b000) libz.so.1 => /lib64/libz.so.1 (0x00007f1055833000) libc.so.6 => /lib64/libc.so.6 (0x00007f105546b000) /lib64/ ld-linux-x86-64.so.2 (0x00007f1055c6b000)
  • 您需要在捆绑的 cx_Oracle.so 文件上运行 ldd,而不是可执行文件本身!很抱歉造成混乱!
  • 看起来 cx_Oracle.so 正在使用 Oracle 12 客户端库。那么这是否意味着无法部署一个同时适用于 11 和 12 客户端的应用程序?例如... libclntsh.so.12.1 => /usr/lib/oracle/12.1/client64/lib/libclntsh.so.12.1 (0x00007fcf93868000)
  • 查看其他问题的答案:stackoverflow.com/questions/39402974/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2014-08-01
  • 1970-01-01
  • 2011-03-21
  • 2018-01-07
  • 2017-11-17
相关资源
最近更新 更多