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

基于PuLP的线性优化Python项目PyInstaller打包exe运行报错求助

解决PuLP + PyInstaller打包后运行报错AttributeError: 'NoneType' object has no attribute 'actualSolve'

这个问题我之前帮同事排查过,本质是PyInstaller打包时没有把PuLP依赖的求解器程序一并打包,导致生成的.exe运行时找不到求解器实例,所以调用group_division.solve()时才会抛出这个NoneType错误——因为PuLP没法初始化求解器对象,自然不存在actualSolve方法。

下面是具体的解决步骤,以PuLP默认的CBC求解器为例:

1. 显式指定求解器路径

首先找到你本地Python环境中CBC求解器的位置,一般路径类似:
C:\PythonXX\Lib\site-packages\pulp\solverdir\cbc\win\64\cbc.exe(Windows系统)

然后修改你的代码,不再依赖PuLP自动查找求解器,而是直接指定路径:

# 替换成你实际的CBC求解器路径
solver_path = r"C:\PythonXX\Lib\site-packages\pulp\solverdir\cbc\win\64\cbc.exe"
# 初始化指定路径的求解器
solver = pulp.PULP_CBC_CMD(path=solver_path)
# 调用solve时传入这个求解器
group_division.solve(solver)

2. 用PyInstaller打包时包含求解器文件

打包时需要把求解器的exe文件一起打包到输出目录,使用--add-data参数:

# Windows系统用分号分隔路径
pyinstaller --add-data "C:\PythonXX\Lib\site-packages\pulp\solverdir\cbc\win\64\cbc.exe;." price.py

如果是Linux/macOS,把分号换成冒号即可。

3. (可选)通过spec文件更灵活配置

如果已经生成了spec文件(运行pyinstaller price.py会自动生成price.spec),可以编辑它的datas列表,添加求解器的路径映射:

a = Analysis(
    ['price.py'],
    datas=[('C:\\PythonXX\\Lib\\site-packages\\pulp\\solverdir\\cbc\\win\\64\\cbc.exe', '.')],
    # 其他参数保持不变...
)

然后用spec文件重新打包:

pyinstaller price.spec

额外注意事项

  • 如果你用的是其他求解器(比如GLPK、Gurobi),方法完全一致:找到对应求解器的可执行文件路径,代码中显式指定,打包时包含进去。
  • 打包完成后,检查dist目录下是否有求解器exe和你的主程序exe在同一文件夹,确保路径匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:22:49