是否可以在AWS Lambda环境中正确指向Python Shapely库的LIBGEOS_C?

Jak*_*wen 6 python amazon-web-services shapely aws-lambda serverless-framework

我正在尝试编写一个 AWS python Lambda 函数,该函数利用 Shapely 进行简单的“多边形中的点”操作。我启动了一个 AWS linux EC2 实例,安装了 Shapely 并有一个工作脚本。然后,我从 EC2 实例下载了 Linux 特定的 libgeos_c.so.1 二进制文件,并将其(通过无服务器框架)捆绑到与 lambda 函数相同的目录中。但是,一旦我部署,脚本将不会执行,因为它会抛出“无法找到库或加载其任何变体...”错误。我什至尝试通过 GEOS_LIBRARY_PATH 环境变量显式指向 libgeos_c.so.1 路径,但没有效果。这是不可能的部署吗?

这是一个代码片段,它设置环境变量,然后调用实际导入和利用 shapely 的辅助脚本。

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
Run Code Online (Sandbox Code Playgroud)

有人在 lambda 中成功部署过 shapely 吗?我的后备计划是回到旧的 postgres/postgis 而不是 shapely,但我肯定想尝试在 dynamo/lambda 堆栈中构建它。

小智 -1

有可能的。尝试按照这些步骤操作,看看问题是否仍然存在。

首先,安装GEOS:

yum install geos-devel.x86_64
Run Code Online (Sandbox Code Playgroud)

然后身材匀称:

pip2.7 install shapely
Run Code Online (Sandbox Code Playgroud)

尝试导入 Shapely:

python2.7 -c "import shapely"
Run Code Online (Sandbox Code Playgroud)

  • 这根本没有解决这个问题。Lambda 不是一个交互式环境。 (2认同)