我有一个简单的python脚本,它导入cx_Oracle,然后进行sql查询。从python运行时一切正常。我在我的计算机上安装了Oracle SQL开发人员,这是免费的。
然后当我用' pyinstaller main.py'编译程序时一切都编好了,我也可以解决问题。但是,只要从该程序进行SQL查询,就会发生以下运行时错误:
cx_Oracle.InterfaceError:无法获取Oracle环境句柄
我尝试了以下内容:
这些都没有奏效。
任何建议我还能做些什么都非常感激。
答案 0 :(得分:4)
我找到了解决方案:
正常运行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但使用spec文件。 pyinstaller mainprogram.spec
它会起作用
答案 1 :(得分:2)
我使用了以下规则:
a.binaries+[('oraociei12.dll','C:\\oracle\\product\\instantclient_12_1\\oraociei12.dll','BINARY')],
元组的第二个元素是DLL的完整路径。最好知道这个......
github上的https://github.com/pyinstaller/pyinstaller/issues/1924
上的Pyinstaller项目存在一个未解决的问题我希望这可以帮助
答案 2 :(得分:1)
The solution described above worked for me, with one small modification - I had to include an extra DLL:
a.binaries+[('oraociei12.dll','C:\\instantclient_12_1\\oraociei12.dll','BINARY'), ('oraons.dll','C:\\instantclient_12_1\\oraons.dll','BINARY')]
Note: I am running Python 3.5 64-bit, PyInstaller 3.2.1, Oracle InstantClient 12.1 64-bit, and Windows 7 64-bit. Hope this helps someone.