我正在尝试使用Python中的Pulp在AWS Lambda上运行优化。我已经打包纸浆(压缩内容而不是目录)和我的lambda_function并上传了zip。我坚持的错误是:


 文件“/var/task/pulp/pulp.py”,第1664行,解决
状态= solver.actualSolve(self,** kwargs)
 AttributeError:'NoneType'对象没有属性'actualSolve'



 我在这里尝试了修复:
 导入Python模块“ ;纸浆和QUOT;在Amazon AWS Lambda上,特别是尝试直接指定解算器,并将解算器(cbc)放入脚本的父目录中无济于事。当我尝试直接指定解算器时,我得到一个不同的错误:


 Pulp:无法执行cbc cwd:/ var / task:PulpSolverError
 Traceback (最近一次调用最后一次):
文件“/var/task/lambda_function.py”,第14行,在lambda_handler
 result = ip_optimise(食谱,设置)
文件“/ var / task / ip_optimise.py“,第102行,在ip_optimise
 prob.solve(COIN_CMD())



 我也试过推杆直接在路径中,例如:
 prob.solve(COIN_CMD(“/ var / task / cbc”))

具有相同的错误(无法执行)
答案 0 :(得分:1)
我终于解决了,它是求解器(cbc)上的权限问题。它可能与压缩过程有关,我还没有到底,但是我能够通过将解算器文件(cbc)复制到/ var / tmp(以允许访问)来解决问题,然后将权限更改为可执行文件。我用来做这个的python代码如下所示:
# Copy solver to tmp
copyfile('pulp/solverdir/cbc/linux/64/cbc', '/tmp/cbc')
# Change permissions to executable
mode = os.stat('/tmp/cbc').st_mode
mode |= (mode & 0o444) >> 2 # copy R bits to X
os.chmod('/tmp/cbc', mode)
# Solve using the newly located cbc solver
prob.solve(COIN_CMD(path="/tmp/cbc"))