2017-11-29 8 views
0

Python에서 Pulp를 사용하여 AWS Lambda에 최적화를 실행하려고합니다. 나는 내 lambda_function과 함께 펄프 (디렉토리가 아닌 내용을 압축)를 포장하고 우편 번호를 업로드했습니다. 내가에 붙어있어 오류 : 내가 여기에 수정을 시도했습니다AWS Lambda 인스턴스의 Python Pulp solver에 액세스 할 수 없습니다.

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 (액세스 허용)에 복사하여 문제를 해결할 수있었습니다. 실행 권한을 변경합니다. 이렇게하기 위해 사용한 파이썬 코드는 다음과 같습니다.

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