无法访问AWS Lambda实例上的Python纸浆解算器

无法访问AWS Lambda实例上的Python纸浆解算器,python,aws-lambda,pulp,Python,Aws Lambda,Pulp,我正在尝试使用Python中的纸浆对AWS Lambda进行优化。我已经打包了pulp(压缩内容而不是目录)和lambda_函数,并上传了zip。我遇到的错误是: File "/var/task/pulp/pulp.py", line 1664, in solve status = solver.actualSolve(self, **kwargs) AttributeError: 'NoneType' object has no attribute 'actualSolve' 我在这里尝试了

我正在尝试使用Python中的纸浆对AWS Lambda进行优化。我已经打包了pulp(压缩内容而不是目录)和lambda_函数,并上传了zip。我遇到的错误是:

File "/var/task/pulp/pulp.py", line 1664, in solve
status = solver.actualSolve(self, **kwargs)
AttributeError: 'NoneType' object has no attribute 'actualSolve'
我在这里尝试了以下修复: 特别是,尝试直接指定解算器,并将解算器(cbc)放置到脚本的父目录中是徒劳的。当我尝试直接指定解算器时,会出现不同的错误:

Pulp: cannot execute cbc cwd: /var/task: PulpSolverError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 14, in lambda_handler
result = ip_optimise(recipes, settings)
File "/var/task/ip_optimise.py", line 102, in ip_optimise
prob.solve(COIN_CMD())
我也尝试过直接插入路径,例如:
prob.solve(COIN\u CMD(“/var/task/cbc”)

由于同样的错误(无法执行)

我最终解决了这个问题,这是求解器(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"))

我最终解决了这个问题,这是一个关于求解器(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"))