4

간단한 "point in polygon"작업을 위해 Shapely를 사용하는 AWS python Lambda 함수를 작성하려고합니다. 나는 AWS linux EC2 인스턴스를 설치하고 Shapely를 설치하고 스크립트를 작성했다. 그런 다음 EC2 인스턴스에서 linux 특정 libgeos_c.so.1 바이너리를 다운로드하고 서버리스 프레임 워크를 통해 내 lambda 기능과 동일한 디렉토리에 번들로 제공했습니다. 그러나 일단 배포하면 스크립트가 실행되지 않습니다. "라이브러리를 찾을 수 없거나 해당 변형을로드 할 수 없습니다 ..."오류가 발생합니다. 심지어 GEOS_LIBRARY_PATH 환경 변수를 통해 libgeos_c.so.1 경로를 명시 적으로 지정하려고 시도했지만 효과가 없습니다. 이것은 불가능한 배치입니까?AWS Lambda 환경에서 Python Shapely 라이브러리의 LIBGEOS_C를 올바르게 가리킬 수 있습니까?

다음은 환경 변수를 설정 한 다음 실제적으로 매끄럽게 가져오고 사용하는 보조 스크립트를 호출하는 코드 스 니펫입니다.

import sys 
import os 
import subprocess 

here = os.path.dirname(os.path.realpath(__file__)) 

# Import installed packages (in site-packages) 
site_pkgs = os.path.join(here, "venv", "lib", "python2.7", "site-packages") 
sys.path.append(site_pkgs) 
import json 

def hello(event, context): 

    command = "GEOS_LIBRARY_PATH={} python test_geo_worker.py".format(here + "/libgeos_c.so.1") 
    foo = subprocess.check_output(command, shell=True) 
    print foo 

성공적으로 람다에 매끄럽게 배치 된 사람이 있습니까? 내 후퇴 계획은 매끈한 대신 좋은 오래된 포스트그레스/포스트 지스로 돌아가는 것이지만 다이나모/람다 스택에서 이것을 구축하려고합니다.

+0

이 문제가 해결 되었습니까? – dcinzona

+1

해결 방법을 찾으셨습니까? 나는 문자 그대로 똑같은 문제를 겪었다. – Graeme

답변

0

가능합니다. 다음 단계를 수행하여 문제가 지속되는지 확인하십시오.

첫째, GEOS를 설치

yum install geos-devel.x86_64 

을 그리고 매끈한 :

pip2.7 install shapely 

시도 매끈한 가져 :

python2.7 -c "import shapely" 
+1

이것은 전혀 문제를 해결하지 못한다. 람다는 쌍방향 환경이 아닙니다. –

+0

당신 말이 맞아요. 내가 어떻게하는지 안다면 내 대답을 삭제할거야. – Yair

0

을 나는이 문제를 명중하고 해결책을 찾기 위해 관리 것처럼 , 나는 그것을 여기에 게시 할 것이라고 생각했다.

문제는 다른 컴파일러가 컴파일 한 라이브러리를 포함하면 컴파일러가 필요하지 않으며 종속성이 작동하지 않는 경우에만 컴파일 된 라이브러리가 람다 내에 존재하지 않는다는 것입니다.

고맙게도 멋진 갈라진 금은 람다에 포함되지 않은 다양한 파이썬 모듈에 대한 종속성과 빌드 된 패키지를 알아 냈습니다.

https://github.com/ryfeus/lambda-packs

다운로드 거기에서 해당 모듈의 (모든 사전에 핍을 통해 설치 제거) 배포 패키지에 복사합니다.

+0

정확히 어떤 기능을 사용 했습니까?이 답변을 해 주실 수 있습니까? https://stackoverflow.com/questions/48190029/setting-up-shapely-on-aws-lambda-python-functions – ZZzzZZzz