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 环境句柄
我试过以下方法:
- 将所有 .dll 和 .jar 文件从 oracle 移动到构建目录,如下所示:https://sourceforge.net/p/cx-oracle/mailman/cx-oracle-users/thread/g7nbks$tl$1@ger.gmane.org/
- 使用 pyinstaller main.py 排除 oci.dll --exclude oci.dll 选项来自 pyinstaller
- 检查我的 ORACLE_HOME 是否正确设置为:- C:\Users\nyname\AppData\Local\Continuum\Anaconda3\Lib\site-packages\instantclient_12_1
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 位。希望这对某人有所帮助。
我有一个简单的 python 脚本,它导入 cx_Oracle 然后进行 sql 查询。当 运行 来自 python 时一切正常。我的计算机上安装了 Oracle SQL 开发人员,它是免费的。
当我用 'pyinstaller main.py' 编译程序时,一切都编译得很好,我也可以开始这个问题。但是一旦从该程序发出 SQL 查询,就会发生以下 运行 时间错误:
cx_Oracle.InterfaceError: 无法获取 Oracle 环境句柄
我试过以下方法:
- 将所有 .dll 和 .jar 文件从 oracle 移动到构建目录,如下所示:https://sourceforge.net/p/cx-oracle/mailman/cx-oracle-users/thread/g7nbks$tl$1@ger.gmane.org/
- 使用 pyinstaller main.py 排除 oci.dll --exclude oci.dll 选项来自 pyinstaller
- 检查我的 ORACLE_HOME 是否正确设置为:- C:\Users\nyname\AppData\Local\Continuum\Anaconda3\Lib\site-packages\instantclient_12_1
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 位。希望这对某人有所帮助。