4

我正在嘗試編寫一個AWS python Lambda函數,它利用Shapely來簡化「點多邊形」操作。我創建了一個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 

有沒有人成功地每次在lambda勻稱的部署?我的備用計劃是回到舊的postgres/postgis,而不是很穩定,但我一定會嘗試在發電機/ lambda堆棧中構建它。

+0

此問題是否解決? – dcinzona

+1

您是否找到解決方案?我的字面意思是剛剛遇到同樣的問題 – Graeme

回答

0

這是可能的。 請嘗試執行這些步驟,看看問題是否仍然存在。

首先,安裝GEOS:

yum install geos-devel.x86_64 

然後勻稱:

pip2.7 install shapely 

嘗試導入勻稱:

python2.7 -c "import shapely" 
+1

這並沒有解決這個問題。 Lambda不是一個交互式環境。 –

+0

你說得對。如果我知道如何,我會刪除我的答案。 – Yair

0

正如我打這個問題,並設法找到一個解決方案,我想我會在這裏發佈。

問題是,他necisary編譯庫沒有在LAMBDA存在,如果包括一些其他Linux編譯的,除非它們是用相同的編譯器構建和依賴關係行不通庫。

值得慶幸的是一個好人已經想通了的依賴關係和構建的軟件包爲各種Python模塊不包含在LAMBDA,包括身材勻稱。

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

下載從那裏的相關模塊,並將其複製到部署包(刪除任何您通過PIP預先安裝)。

+0

你從功能中精確地使用了哪種?可以回答這個問題https://stackoverflow.com/questions/48190029/setting-up-shapely-on-aws-lambda-python-functions – ZZzzZZzz

相關問題