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

Nic*_*ick 3 python cx-oracle pyinstaller

我有一个简单的python脚本,可以导入cx_Oracle,然后进行sql查询。从python运行时一切正常。我的计算机上安装了Oracle SQL Developer,它是免费的。

然后,当我使用“ 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。组织/
  • 使用pyinstaller main.py-从pyinstaller中排除oci.dll选项排除oci.dll
  • 检查我的ORACLE_HOME是否正确设置为:-C:\ Users \ nyname \ AppData \ Local \ Continuum \ Anaconda3 \ Lib \ site-packages \ instantclient_12_1

这些都不起作用。

任何其他我能做的建议,我们将不胜感激。

Nic*_*ick 5

我找到了解决方案:

正常运行pyinstaller时,编译中将缺少一个文件。需要手动添加:

为此,您需要使用以下命令编辑该行:

binaries+[('oraociei12.dll','oraociei12.dll','BINARY')],
Run Code Online (Sandbox Code Playgroud)

确保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 )
Run Code Online (Sandbox Code Playgroud)

在第二步中,再次运行pyinstaller,但使用spec文件。pyinstaller mainprogram.spec

它会工作