Pyinstaller: cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

Pyinstaller: cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

我有一个简单的 python 脚本,它导入 cx_Oracle 然后进行 sql 查询。当 运行 来自 python 时一切正常。我的计算机上安装了 Oracle SQL 开发人员,它是免费的。

当我用 'pyinstaller main.py' 编译程序时,一切都编译得很好,我也可以开始这个问题。但是一旦从该程序发出 SQL 查询,就会发生以下 运行 时间错误:

cx_Oracle.InterfaceError: 无法获取 Oracle 环境句柄

我试过以下方法:

None 有效。

非常感谢任何建议我还能做些什么。

我找到了解决方案:

当运行正常使用pyinstaller编译时会少一个文件。需要手动包含:

为此,您需要按如下方式编辑该行:

binaries+[('oraociei12.dll','oraociei12.dll','BINARY')],

确保 oraociei12.dll 在当前文件夹中。

block_cipher = None
    a = Analysis(['LDM-shark.py'],
                 pathex=['C:\Users\dicknic\AppData\Local\Home\dev\LDM'],
                 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+[('oraociei12.dll','oraociei12.dll','BINARY')],
              a.zipfiles,
              a.datas,
              name='mainprogram',
              debug=False,
              strip=False,
              upx=True,
              console=True )

第二步 运行 pyinstaller 再次使用规范文件。 pyinstaller mainprogram.spec

它会起作用

我使用了以下规则:

a.binaries+[('oraociei12.dll','C:\oracle\product\instantclient_12_1\oraociei12.dll','BINARY')],

元组的第二个元素是DLL的完整路径。最好知道这个...

https://github.com/pyinstaller/pyinstaller/issues/1924

上的 Pyinstaller 项目在 github 上有一个未解决的问题

希望对您有所帮助

上述解决方案对我很有效,只需稍加修改 - 我必须包含一个额外的 DLL:

a.binaries+[('oraociei12.dll','C:\instantclient_12_1\oraociei12.dll','BINARY'), ('oraons.dll','C:\instantclient_12_1\oraons.dll','BINARY')]

注意:我是 运行 Python 3.5 64 位,PyInstaller 3.2.1,Oracle InstantClient 12.1 64 位,Windows 7 64 位。希望这对某人有所帮助。