auto-py-to-exe打包Python脚本运行正常但生成exe报ibm_db错误咨询
核心原因
ibm_db依赖的IBM CLI驱动(clidriver目录)包含动态链接库和配置文件,PyInstaller默认不会自动打包该依赖。且打包后运行时,程序会被解压到系统临时目录下的_MEIXXXX文件夹,ibm_db默认会从原编译环境的路径找驱动,找不到就抛出路径不存在、DLL加载失败的错误。
修复步骤
1. 脚本前置路径适配
在你的Python脚本所有import语句之前,添加如下代码,手动适配打包后的运行环境:
import sys import os # 识别是否为PyInstaller打包后的运行环境 if getattr(sys, 'frozen', False): # 获取打包后临时解压目录的路径 runtime_path = sys._MEIPASS # 设置IBM_DB_HOME环境变量,供ibm_db读取驱动位置 os.environ['IBM_DB_HOME'] = os.path.join(runtime_path, 'clidriver') # 将驱动的bin目录加入系统DLL搜索路径 driver_bin_path = os.path.join(runtime_path, 'clidriver', 'bin') os.add_dll_directory(driver_bin_path)
2. 修正打包命令
将之前的--add-data替换为--add-binary处理驱动文件,递归复制完整的clidriver目录:
pyinstaller --noconfirm --onefile --windowed --add-data "G:/09 SCRIPTS AUTOMATIZACION/tst/FLOS.ico;." --add-binary "C:/py_project/TicketingIngenieriaVENV/Lib/site-packages/clidriver/*;clidriver/" "G:/09 SCRIPTS AUTOMATIZACION/tst/TicketingIngenieria.py"
若上述命令中
*通配符不生效,可替换为**递归匹配所有子目录文件。
3. 可选验证步骤
如果仍有报错,可先移除--onefile参数,使用文件夹模式打包:
pyinstaller --noconfirm --windowed --add-data "G:/09 SCRIPTS AUTOMATIZACION/tst/FLOS.ico;." --add-binary "C:/py_project/TicketingIngenieriaVENV/Lib/site-packages/clidriver/*;clidriver/" "G:/09 SCRIPTS AUTOMATIZACION/tst/TicketingIngenieria.py"
打包完成后打开dist目录下的程序文件夹,检查clidriver/bin目录是否存在、内部dll文件是否完整,确认结构正确后再换回--onefile参数即可。
你遇到的Distutils导入警告属于PyInstaller的兼容提示,不影响程序运行,可直接忽略。
内容的提问来源于stack exchange,提问作者1511
相关产品推荐
相关产品推荐

