【问题标题】:Packaging Issues PyInstaller of Python application with Oracle Database Connection使用 Oracle 数据库连接的 Python 应用程序的 PyInstaller 打包问题
【发布时间】:2021-02-19 15:43:13
【问题描述】:

我正在尝试使用 pyinstaller 打包一个 python 应用程序。我正在使用 cx_oracle 和 oracle 即时客户端连接到 oracle 数据库。我正在使用 Windows 10。我的应用程序在打包之前运行良好。但是打包后,我尝试运行可执行文件时出现如下错误:

cx_Oracle.DatabaseError: DPI-1072: Oracle 客户端库版本不受支持

此错误发生在cx_Oracle.init_oracle_client(lib_dir=r"instantclient_19_9") 行中。根据 ODPI 日志,Oracle Instant Client 加载成功,但在验证时出现错误。 问题不是由于系统上的 Oracle Instant Client 版本不同。我检查了系统上的其他版本,但没有。此外,当我删除我尝试加载的 Oracle Instant Client 时,会发生不同的错误,即未找到 Oracle Instant 客户端。 当我在模拟或省略数据库连接的同时打包应用程序时,打包工作正常。

我已经在两个不同的系统上尝试了所有方法,但我遇到了同样的问题。另一个人也可以重现我的问题。此外,我可以使用以下 玩具示例 复制此错误:

不需要存在 Oracle 数据库。 Oracle Instant Client 需要安装到以下文件所在的文件夹中。

import cx_Oracle

if __name__ == "__main__":
    cx_Oracle.init_oracle_client(lib_dir=r"instantclient_19_9")

我是如何打包的:

  • 转到您要将应用程序打包到的某个文件夹。我称它为部长。
  • 确保它是空的。
  • python -m PyInstaller --name 应用程序 C:\path\to\application.py
  • python -m PyInstaller application.spec
  • exe 位于 ministaller\dist\application 文件夹中。通过 cmd 调用它以查看错误消息。

【问题讨论】:

    标签: python windows oracle pyinstaller


    【解决方案1】:

    三重检查是否加载了正确的 Oracle 客户端。在启动 Python 之前将环境变量 DPI_DEBUG_LEVEL 设置为 64。 (见cx_Oracle Initialization documentation)。这将显示 cx_Oracle 如何查找 Instant Client 库,并让您确保正在使用的计算机上的某处没有其他(旧)oci.dll。

    检查您使用的是受支持的操作系统版本(即不是 Windows 7)。

    检查您是否拥有所有 Instant Client 库(显然您不需要 JDBC 文件):https://docs.oracle.com/en/database/oracle/oracle-database/19/lnoci/instant-client.html#GUID-6895DB45-97AA-4738-9959-BD677D610186

    确保计算机安装了正确的 VS Redistributable。

    【讨论】:

    • 谢谢,但我已经检查了大部分内容。无论哪种方式,该链接都应该有帮助。
    【解决方案2】:

    我在 PyInstaller GitHub 上发布了这个问题,那里给出的答案为我解决了这个问题: https://github.com/pyinstaller/pyinstaller/issues/5572

    【讨论】:

    • 在设置 PATH 之前遇到问题时能否分享 DPI_DEBUG_LEVEL=64 的输出?这可能让我们看到我们可以在哪些方面改进 cx_Oracle。
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多