【问题标题】:Python package management for AWS lambda functionAWS lambda 函数的 Python 包管理
【发布时间】:2018-06-15 07:45:15
【问题描述】:

我正在努力了解如何最好地管理 python 包以压缩 AWS lambda 函数。

在我的项目文件夹中,我有许多 .py 文件。作为构建过程的一部分,我将它们压缩并使用 AWS API 创建和发布我的 lambda 函数,该函数提供 zip 文件作为该调用的一部分。

因此,我认为我需要在我的项目文件夹中包含我的 lambda 依赖的所有包。

考虑到这一点,我拨打pip如下:

pip install -t . tzlocal

这似乎在我的项目文件夹中填满了很多东西,我不确定是否所有这些都需要压缩到我的 lambda 函数部署中,例如

.\pytz
.\pytz-2018.4.dist-info
.\tzlocal
...
...

第一个问题 - 所有这些东西都需要压缩到我的 lambda 中吗?

如果没有,我如何获得一个包,只为我提供进入我的 zip 文件所需的位?

来自 .Net / Node 背景 - 前者是我 NuGet 我的包,它进入一个不错的 packages 文件夹,其中仅包含我需要的 .dll 文件,然后我将其引用到我的项目中。

如果我确实需要所有这些文件,有没有办法将它们“放置”在更整洁的地方 - 比如在包文件夹中?

最后,有没有办法只下载我真正需要的二进制文件?我在这里读到的问题是 Lambda 函数需要与我在桌面开发环境 (Windows) 上使用的二进制文件不同的二进制文件,因此也不知道如何解决该问题。

【问题讨论】:

    标签: python amazon-web-services aws-lambda


    【解决方案1】:

    numpy 使用的二进制库应在 AWS Linux 上编译以在 lambda 上运行。我发现本教程很有用 (https://serverlesscode.com/post/deploy-scikitlearn-on-lamba/)。它甚至有更新版本使用 docker 容器,因此您不需要 EC2 实例进行编译,您可以在本地完成所有操作。

    至于软件包:AWS 文档说要将所有内容安装到根目录,但您可以将它们全部安装在 ./packages 目录中,如果 lambda 处理程序代码将其附加到路径的开头

    import os
    import sys
    
    cwd = os.getcwd()
    package_path = os.path.join(cwd, 'packages')
    sys.path.append(package_path)
    

    【讨论】:

    • 嗨,您是否可以添加一个链接,指向 AWS 文档中说要在根目录中安装所有内容的位置?
    • docs.aws.amazon.com/lambda/latest/dg/… 见第三步:Install any libraries using pip. Again, you install these libraries at the root level of the directory.
    猜你喜欢
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2018-12-02
    • 2020-04-20
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多