2017-11-29 15 views
0

私は、PulpをPythonで使用してAWS Lambdaの最適化を実行しようとしています。私はラムダ関数と一緒にパルプ(ディレクトリではなく内容を圧縮する)をパッケージ化し、zipをアップロードしました。私がこだわっているエラーは、次のとおりです。AWS LambdaインスタンスのPython Pulpソルバーにアクセスできない

File "/var/task/pulp/pulp.py", line 1664, in solve 
status = solver.actualSolve(self, **kwargs) 
AttributeError: 'NoneType' object has no attribute 'actualSolve' 

私はここに修正を試してみた:特に Importing Python Module "Pulp" on Amazon AWS Lambdaが直接ソルバーを指定しようとしている、とするスクリプトの親ディレクトリにソルバー(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_CMD("/var/task/cbc")) を同じエラーでの

答えて

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"))