我制作了一个使用 ibm_db python 模块连接到 DB2 的脚本。通过脚本运行时它工作正常,但当我将其转换为 exe 时,我收到错误,因为 [IBM][CLI Driver] SQL10007N 无法检索消息“0”。原因代码:“6”。 SQL代码=-1042
首先,在脚本中运行
import ibm_db
时,我遇到了此错误 ImportError: DLL load failed while importing ibm_db: 找不到指定的模块。
我使用 os.add_dll_directory("C:\\..\\clidriver\\bin")
解决了这个问题
但是当我使用 pyinstaller --onefile 命令创建 exe 时,我收到此错误 [IBM][CLI Driver] SQL10007N 无法检索消息“0”。原因代码:“6”。 SQL代码=-1042
任何人都可以提供详细的解决方案来解决这个问题
此答案特定于以下组件,它可能不适用于其他版本,也不适用于其他操作系统:
pip install ibm_db
验证您的脚本是否在没有 pyinstaller 的情况下正确运行(即未捆绑)。
你需要两件事:
您的 Python 脚本在导入 ibm_db 之前需要启动代码(请参阅下面的示例)来定位 clidriver,无论您的脚本是未捆绑运行还是捆绑运行(使用 pyinstaller),以便对
add_dll_directory
的调用在任何一种情况下都可以工作。
该捆绑包必须将 clidriver 树作为
--add-binary
包含在名为 clidriver 的子目录中。
始终先捆绑到单文件夹(即不使用
--onefile
选项)并在尝试 --onefile
选项之前让单文件夹方法正常工作。
import ibm_db
之前的示例代码如下:
import sys
import os
# for ibm_db version 3.2.3 on microsoft-windows, works with/without pyinstaller.
# This is only valid if using clidriver (which comes by default with ibm_db wheels).
# For pyinstaller on ms-windows, use --add-binary /path/to/clidriver:./clidriver .
if ( sys.platform == "win32" ):
site_packages=""
clidriver_bin=""
program_directory = os.path.dirname(os.path.abspath( __file__ ))
for directory in sys.path:
if 'clidriver' in directory and 'bin' in directory:
clidriver_bin = directory
break
if 'site-packages' in directory:
site_packages = directory
if site_packages != "" and clidriver_bin == "":
clidriver = os.path.join(site_packages , "clidriver")
clidriver_bin = os.path.join(clidriver, "bin")
if clidriver_bin == "" and site_packages == "":
clidriver_subdir = os.path.join( program_directory , "clidriver")
if os.path.isdir(clidriver_subdir):
clidriver_bin = os.path.join(clidriver_subdir , "bin")
else:
print("Failed to find a bundled clidriver directory at: " + clidriver_subdir )
sys.exit()
if clidriver_bin != "" and os.path.isdir(clidriver_bin):
os.add_dll_directory(clidriver_bin)
else:
print("Missing directory: " + clidriver_bin )
sys.exit()
import ibm_db
如果您的 python 脚本名为 myscript.py,并包含上述片段,则将其捆绑到单个文件夹的示例命令行是(将
c:\path\to\clidriver
替换为您的 real 站点包位置):
pyinstaller -y --add-binary c:\path\to\site-packages\clidriver:./clidriver myscript.py
当且仅当该方法有效时,您可以使用以下命令创建可执行文件:
pyinstaller -y --add-binary c:\path\to\site-packages\clidriver:./clidriver --onefile myscript.py