首页 > 解决方案 > cx_Oracle 与 Pyinstaller 的连接导出到 exe

问题描述

我正在尝试使用 Pyinstaller 从一个脚本中捆绑一个 exe 文件,该脚本创建一个 tkinter gui,该 gui 使用 cx_Oracle 从 Oracle 数据库收集数据。该脚本在 python 中运行时执行没有错误,但 exe 给出以下错误。

Exception in Tkinter callback
Traceback (most recent call last):
  File "tkinter\__init__.py", line 1892, in __call__
  File "report_gui.py", line 127, in <lambda>
  File "report_gui.py", line 63, in run_from_gui
  File "run_reports.py", line 52, in run_rpts
cx_Oracle.DatabaseError: DPI-1072: the Oracle Client library version is unsupported

我发现一些线程详细说明了类似的问题,但在实施他们的建议后我得到了同样的错误,即 Al Nazari 在这个线程中的答案How to bundle cx_oracle with Pyinstaller以及这个页面https://mail.python.org /pipermail/tutor/2014-December/103608.html。两者都已有多年历史,所以我想知道最近的更新是否改变了一些事情。我正在运行 Python 3.9、Pyinstaller 4.5.1 和 Oracle 即时客户端 19.11。这是我的 .spec 文件:

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(['report_gui.py'],
             pathex=['.\'],
             binaries=[],
             datas=[],
             hiddenimports=['babel.numbers'],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries + [('oraociei19.dll','.\instantclient_19_11\oraociei19.dll','BINARY')] + 
[('oci.dll','.\instantclient_19_11\oci.dll','BINARY')] +
[('ocijdbc19.dll','.\instantclient_19_11\ocijdbc19.dll','BINARY')] +
[('ociw32.dll','.\instantclient_19_11\ociw32.dll','BINARY')] +
[('oramysql19.dll','.\instantclient_19_11\oramysql19.dll','BINARY')] +
[('orannzsbb19.dll','.\instantclient_19_11\orannzsbb19.dll','BINARY')] +
[('oraocci19.dll','.\instantclient_19_11\oraocci19.dll','BINARY')] +
[('oraocci19d.dll','.\instantclient_19_11\oraocci19d.dll','BINARY')] +
[('oraons.dll','.\instantclient_19_11\oraons.dll','BINARY')] +
[('orasql19.dll','.\instantclient_19_11\orasql19.dll','BINARY')],
          a.zipfiles,
          a.datas,  
          [],
          name='report_gui',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None , icon='logo.ico')

需要使用此应用程序的人将拥有 Oracle 客户端,但没有 Python。我以前从未使用过 Pyinstaller,所以我可能在这里遗漏了一些明显的东西。

标签: pythonpyinstallerexecx-oracle

解决方案


推荐阅读