4

Я пытаюсь написать Лямбду функцию AWS python, которая использует Shapely для простых операций «point in polygon». Я развернул экземпляр AWS linux EC2, установил Shapely и имел рабочий скрипт. Затем я загрузил linux specific libgeos_c.so.1 из моего экземпляра EC2 и связал его (через сервер без сервера), чтобы существовать в том же каталоге, что и моя лямбда-функция. Однако после развертывания сценарий не будет выполняться, потому что он выдает ошибку «Не могу найти библиотеку или загрузить любую ее версию ...». Я даже попытался явно указать путь libgeos_c.so.1 через переменную среды GEOS_LIBRARY_PATH, чтобы не повлиять. Разве это невозможно?Можно ли правильно указать LIBGEOS_C библиотеки Python Shapely в среде AWS Lambda?

Вот фрагмент кода, который устанавливает переменную окружения, а затем вызывает вторичный скрипт, который фактически импортирует и использует красивую форму.

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 

Есть ли у кого-нибудь все успешно развернутые стройки в лямбда? Мой резервный план - вернуться к хорошим старым postgres/postgis вместо стройного, но я бы хотел попытаться построить это в стеке dynamo/lambda.

+0

Была ли эта проблема решена? – dcinzona

+1

Вы нашли решение на этом? Я буквально просто попал в ту же проблему – Graeme

ответ

0

Это возможно. Попробуйте выполнить следующие действия и проверьте, не устранена ли проблема.

Во-первых, установить GEOS:

yum install geos-devel.x86_64 

Тогда Shapely:

pip2.7 install shapely 

Попытка импортировать Shapely:

python2.7 -c "import shapely" 
+1

Это не затрагивает вопрос вообще. Лямбда не является интерактивной средой. –

+0

Вы правы. Я бы удалил свой ответ, если бы знал, как это сделать. – Yair

0

Как я ударил эту проблему и удалось найти решение , Я думал, что разместил его здесь.

Проблема в том, что он не скомпилировал библиотеки в Lambda, если вы включаете библиотеки, скомпилированные каким-либо другим Linux, если только они не построены с одним и тем же компилятором, и зависимости не будут работать.

К счастью, красивый парень разработал зависимости и построил пакеты для различных модулей Python, которые не включены в Lambda, в том числе и красивые.

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

загрузить соответствующий модуль оттуда и скопировать его в пакет развертывания (удаление любого вы установили через пип заранее).

+0

Какую форму вы точно использовали в функции?. Можете ли вы ответить на этот https://stackoverflow.com/questions/48190029/setting-up-shapely-on-aws-lambda-python-functions? – ZZzzZZzz