You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包含OR-Tools CP-Sat的Python程序exe运行失败

问题描述

本地VS Code环境下运行程序时模型工作状态完全正常,使用PyInstaller将程序打包为exe后运行出现异常:仅弹出一个持续1秒的小窗口后就无任何后续响应,添加tk消息框测试也没有任何输出。

主程序导入语句如下:

import csv
import os 
import openpyxl
import sft_gen
from ortools.sat.python import cp_model

自定义文件sft_gen的导入语句如下:

import csv
from tkinter import Tk
from tkinter.filedialog import askopenfilename

在cmd命令提示符中运行该exe时可查看报错信息,经逐一测试排查后确认:from ortools.sat.python import cp_model导入语句是导致exe无法正常执行的根本原因,需求为将开发完成的CP模型部署分发供其他用户使用。

解决方案
  • 补充PyInstaller隐藏导入参数
    PyInstaller默认无法自动抓取ortools库中部分动态加载的依赖,是导致导入失败的核心原因。打包时直接执行附加依赖声明的命令即可:
    pyinstaller -F --hidden-import=ortools.sat.python.cp_model --hidden-import=ortools.init.python.init 主程序文件名.py
    
    如果执行后仍提示ortools相关模块缺失,直接追加--collect-all ortools参数,自动收集ortools库下所有子模块和依赖文件,命令如下:
    pyinstaller -F --collect-all ortools 主程序文件名.py
    
    由于程序用到tkinter组件,若打包后仍存在窗口闪退问题,可额外补充--hidden-import=tkinter参数。
  • 通过spec文件固定打包配置
    若需要反复调整打包规则,可先生成spec配置文件,编辑文件中Analysis段的hiddenimports配置项,把缺失的ortools模块加入列表:
    a = Analysis(
        # 其余原有配置保持默认即可
        hiddenimports=['ortools.sat.python.cp_model', 'ortools.init.python.init'],
    )
    
    保存后执行pyinstaller 配置文件名.spec即可完成打包,无需每次输入长串命令参数。
  • 更换其他打包工具验证
    若PyInstaller调整后仍存在兼容问题,可尝试Nuitka、py2exe等其他打包工具。以Nuitka为例,打包时需要显式声明包含ortools包、启用tkinter插件,参考命令:
    nuitka --standalone --onefile --enable-plugin=tk-inter --include-package=ortools 主程序文件名.py
    
  • 调试注意事项
    每次打包完成后不要直接双击运行exe,先打开cmd进入exe所在目录,通过命令行启动exe,可直接看到完整的报错输出,快速定位剩余缺失的依赖项。

内容的提问来源于stack exchange,提问作者SixtyCorrupted

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:39:15