python - 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,所以我可能在这里遗漏了一些明显的东西。
解决方案
推荐阅读
- azure - 通过 Azure AD B2C 中的多租户 Azure Active Directory 登录
- python - 由于使用 pyro 和 pytorch 的样本中存在多类分布,因此在 svi 步骤中出现错误
- python - Flask-WTF 强制填充所有字段,即使它们没有在模板中呈现
- php - 如何修复无法加载动态库 gd2 php 警告错误?
- flutter - 如何在飞镖颤动中更新嵌套地图?
- python - 同时与多列进行复杂比较
- java - 无法模拟 RestTemplate 构造函数
- css - 尝试更改背景颜色时,Thymeleaf 无法解析为表达式
- encryption - 如何手动计算和验证证书签名请求的签名
- entity-framework - 查询“大于或等于”之间的 ASP EF Core 引发编译错误?