【问题标题】:Is it possible to correctly point to Python Shapely library's LIBGEOS_C in AWS Lambda environment?是否可以在 AWS Lambda 环境中正确指向 Python Shapely 库的 LIBGEOS_C?
【发布时间】:2017-04-30 14:24:32
【问题描述】:

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

这是一个设置环境变量的代码 sn-p,然后调用一个辅助脚本,该脚本实际导入和使用 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

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

【问题讨论】:

  • 这个问题解决了吗?
  • 您找到解决方案了吗?我确实遇到了同样的问题

标签: python amazon-web-services aws-lambda serverless-framework shapely


【解决方案1】:

因为我遇到了这个问题并设法找到了解决方案,所以我想我会把它贴在这里。

问题是 Lambda 中不存在必要的编译库,如果您包含由其他 Linux 编译的库,除非它们是使用相同的编译器构建的并且依赖项不起作用。

谢天谢地,一位不错的小伙子已经为 Lambda 中不包含的各种 Python 模块(包括 shapely)找出了依赖关系并构建了包。

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

从那里下载相关模块并将其复制到部署包中(删除您事先通过 pip 安装的任何模块)。

【讨论】:

【解决方案2】:

我设置了一个构建脚本,它将生成 Shapely 依赖项作为 Lambda 层。你可以在这里查看我的项目https://github.com/bearflagrobotics/libgeos-lambda-build 但基本上它只是使用 Amazon 图像来下载和构建 Shapely 的 C++ 依赖项以在 Lambda 中使用。只需将 zip 文件作为层放入并运行任何版本的 Python/Shapely

【讨论】:

  • 链接已损坏,或存储库不再可用。
【解决方案3】:

我设法使用来自https://hub.docker.com/r/lambci/lambda/tags 的图像使其运行

确保抓取带有正确标签的图像: 例如python3.7

您可以直接运行一个容器并编译您的库并在该环境中推送,或者您可以按照说明here 构建您自己的 docker 映像并自动安装您的包,使用您的代码,并将 ZIP 上传到 lambda/s3。

【讨论】:

    【解决方案4】:

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

    首先,安装 GEOS:

    yum install geos-devel.x86_64
    

    然后匀称:

    pip2.7 install shapely
    

    尝试导入 Shapely:

    python2.7 -c "import shapely"
    

    【讨论】:

    • 这根本没有解决问题。 Lambda 不是交互式环境。
    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    相关资源
    最近更新 更多