pyinstaller打包ortools

215 阅读1分钟

检测求解器路径以及是否可用

from inspect import getmembers
import pulp

for m in getmembers(pulp.solvers):
    try:
        if isinstance(m[1], type):
            print('--', m[1]().available(), m)
    except Exception:
        continue

代码结果如下所示

其中cbc求解器的路径为/Users/MZYzhouyi/opt/anaconda3/envs/pure_pytorch/lib/python3.9/site-packages/pulp/solverdir/cbc/osx/64/cbc,而改文件是root文件,pyinstaller权限不足不会打包该文件

-- False ('COIN', <class 'pulp.solvers.COIN_CMD'>)
-- False ('COINMP_DLL', <class 'pulp.solvers.COINMP_DLL'>)
-- False ('COIN_CMD', <class 'pulp.solvers.COIN_CMD'>)
-- False ('CPLEX', <class 'pulp.solvers.CPLEX_CMD'>)
-- False ('CPLEX_CMD', <class 'pulp.solvers.CPLEX_CMD'>)
-- False ('CPLEX_DLL', <class 'pulp.solvers.CPLEX_DLL'>)
-- False ('CPLEX_PY', <class 'pulp.solvers.CPLEX_PY'>)
-- False ('GLPK', <class 'pulp.solvers.GLPK_CMD'>)
-- False ('GLPK_CMD', <class 'pulp.solvers.GLPK_CMD'>)
-- False ('GUROBI', <class 'pulp.solvers.GUROBI'>)
-- False ('GUROBI_CMD', <class 'pulp.solvers.GUROBI_CMD'>)
-- False ('MIPCL_CMD', <class 'pulp.solvers.MIPCL_CMD'>)
-- /Users/MZYzhouyi/opt/anaconda3/envs/pure_pytorch/lib/python3.9/site-packages/pulp/solverdir/cbc/osx/64/cbc ('PULP_CBC_CMD', <class 'pulp.solvers.PULP_CBC_CMD'>)
-- /usr/bin/java ('PULP_CHOCO_CMD', <class 'pulp.solvers.PULP_CHOCO_CMD'>)
-- False ('PYGLPK', <class 'pulp.solvers.PYGLPK'>)
-- False ('SCIP', <class 'pulp.solvers.SCIP_CMD'>)
-- False ('SCIP_CMD', <class 'pulp.solvers.SCIP_CMD'>)
-- False ('XPRESS', <class 'pulp.solvers.XPRESS'>)
-- False ('YAPOSIB', <class 'pulp.solvers.YAPOSIB'>)

使用pyinstaller打包

sudo pyinstaller --noconfirm --onefile --console --add-data "/Users/MZYzhouyi/opt/anaconda3/envs/pure_pytorch/lib/python3.9/site-packages/pulp:pulp/" employee.py
# 将对应的依赖放进去,而employee.exe运行的时候,pulp包能自动搜索是否存在cbc

参考文献