[英]How to bundle cx_oracle with Pyinstaller
我的目标是使用 Pyinstaller 从一个使用 Tkinter 和 cx_oracle 访问数据库的简单 python 脚本中捆绑一个 exe 文件。 python代码是在安装了Anaconda、cx_oracle包和oracle客户端的windows机器上开发的。 然后我需要在许多没有oracle 客户端或 Python 的目标 Windows 机器上运行 exe 文件。
我在开发机器上使用 Python 2.7 和 Pyinstaller 3.1。
我在网上搜索了一段时间,但只找到了一个教程: https : //mail.python.org/pipermail/tutor/2014-December/103608.html
我按照相同的步骤修改了规范文件,如下所示:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['mycode.py'],
pathex=['C:\\Users\\myuser\\PycharmProjects\\mycode'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries + [('oraociei11.dll','D:\ProgramFiles\Anaconda2\oraociei11.dll','BINARY')],
a.zipfiles,
a.datas,
name='mycode',
debug=False,
strip=False,
upx=True,
console=True )
捆绑工作。 代码在安装了 oracle 客户端的原始机器上运行。 但是在没有 oracle 客户端的单独机器上,它无法运行,并显示以下错误消息:
Tkinter 回调 Traceback 中的异常(最近一次调用最后一次):文件“lib-tk\\Tkinter.py”,第 1537 行,调用文件“”,第 152 行,登录数据库错误:DPI-1047:64 位 Oracle 客户端库不能被加载:“找不到指定的模块”。 请参阅https://oracle.github.io/odpi/doc/installation.html#windows寻求帮助
现在我很困惑,将 python 脚本中的 exe 安全地与 cx_oracle 捆绑在一起,以便它可以在没有 oracle 客户端的 Windows 机器上运行,需要哪些步骤? 还是我“必须”在目标机器上安装 oracle 客户端?
我真的希望找到比我在上面找到的旧链接更详细的关于将 cx_oracle 与 pyinstaller 捆绑在一起的教程。
cx_Oracle 需要 Oracle 客户端。 您将需要安装在目标机器上! 请注意错误消息中的链接: https://oracle.github.io/odpi/doc/installation.html#windows 。 它应该可以帮助您完成让 cx_Oracle 在目标机器上工作所需的一切。
感谢您发布这个问题。 你走在正确的道路上。 您只缺少其他 .dll 文件。 您需要将在 Oracle 即时客户端文件夹中找到的所有 .dll 文件添加到 .spec 文件中。 有关我为即时客户端 19.10 所做的示例,请参见下面的示例:
a.binaries = a.binaries + [('oraociei19.dll','.\\instantclient_19_10\\oraociei19.dll','BINARY')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.