4

私は単純な "ポリゴンのポイント"操作にShapelyを利用するAWS pythonラムダ関数を記述しようとしています。私は、ShapelyをインストールしたAWS linux EC2インスタンスを作成し、スクリプトを作成しました。私はその後、EC2インスタンスからlinux固有のlibgeos_c.so.1バイナリをダウンロードし、ラムダ関数と同じディレクトリに存在するように(サーバレスフレームワーク経由で)バンドルしました。しかし、一度私はスクリプトが "ライブラリを見つけることができませんでしたまたは任意のバリエーションのいずれかをロード..."のため、スクリプトが実行されません展開します。私は、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

私はこの問題をヒットし、解決策を見つけるために管理してきたように私はここにそれを掲示すると思った。

問題は、他のLinuxでコンパイルされたライブラリを同じコンパイラでビルドしておかないと依存関係が動作しない場合、コンパイルされたライブラリがLambdaに存在しないことです。

ありがたいことに、素晴らしいチャップは、ラムダに含まれていないさまざまなPythonモジュールの依存関係を理解し​​ています。

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

そこから関連するモジュールをダウンロードし、展開パッケージ(あなたは事前にピップ経由でインストールしたの除去)にコピーします。

+0

あなたはこの機能からどんな形できちんと使いましたか?この回答にお答えできますか?https://stackoverflow.com/questions/48190029/setting-up-shapely-on-aws-lambda-python-functions – ZZzzZZzz

関連する問題