繁体   English   中英

如何将 cx_oracle 与 Pyinstaller 捆绑在一起

[英]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')]

  • [('orannzsbb19.dll','.\\instantclient_19_10\\orannzsbb19.dll','BINARY')]
  • [('oraocci19d.dll','.\\instantclient_19_10\\oraocci19d.dll','BINARY')]
  • [('oraocci19.dll','.\\instantclient_19_10\\oraocci19.dll','BINARY')]
  • [('oci.dll','.\\instantclient_19_10\\oci.dll','BINARY')]
  • [('ocijdbc19.dll','.\\instantclient_19_10\\ocijdbc19.dll','BINARY')]
  • [('ociw32.dll','.\\instantclient_19_10\\ociw32.dll','BINARY')]
  • [('oramysql19.dll','.\\instantclient_19_10\\oramysql19.dll','BINARY')]
  • [('oraons.dll','.\\instantclient_19_10\\oraons.dll','BINARY')]
  • [('orasql19.dll','.\\instantclient_19_10\\orasql19.dll','BINARY')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM