如何将 python 库添加到 Alexa 的 AWS lambda 函数?

How do I add python libraries to an AWS lambda function for Alexa?

我正在按照教程使用 Python 创建 Alexa 应用程序:

Python Alexa Tutorial

我能够成功地完成所有步骤并将应用程序安装到 work.I 现在想修改 python 代码并使用外部库,例如 import requests 或任何其他库我使用 pip 安装。我将如何设置我的 lambda 函数以包含我在我的机器上本地安装的任何 pip 包?

official documentation 还不错。简而言之,您需要创建一个目录的 zip 文件,其中包含您的 lambda 函数的代码和您在顶层使用的所有外部库。

您可以通过停用您的 virtualenv 来模拟它,将所有需要的库复制到工作目录(如果您在命令行上调用脚本,它总是在 sys.path 中),并检查您的脚本是否仍然有效。

您可能需要考虑使用 zappa 等框架,它会为您打包和部署 lambda 函数。

您可以将其与 flask-ask to have an easier time making Alexa skills. There's even a video tutorial of this (from the zappa readme) here

结合使用

正如亚马逊官方文档中所描述的那样link here这就像在你的文件夹中安装所需的包后创建所有文件夹内容的 zip 一样简单python lambda 代码。

正如 Vineeth 在他的评论中指出的那样,从内联代码编辑器转移到 zip 文件上传方法的第一步是在配置设置下更改您的 lambda 函数处理程序名称以包含 python 脚本保存 lambda 处理程序的文件名。

lambda_handler => {你的-python-脚本文件名}.lambda_handler.

python-lambda and lambda-uploader 等其他解决方案有助于简化上传过程和最重要的本地测试。这些将在开发中节省大量时间。

与@d3ming 的回答相呼应,此时框架是一个不错的选择。手动创建部署包并非不可能,但您需要上传包的编译代码,如果您在 non-linux 系统上编译该代码,运行 进入的机会您的系统与 Lambda 函数的部署环境之间的差异问题很大。

然后您可以通过在 linux 机器或 Docker 容器上编译您的代码来解决这个问题。但是在所有这些复杂性之间,您可以通过采用框架获得更多。

Serverless 被广泛采用并支持自定义 python 包。它甚至与 Docker 集成以编译您的 python 依赖项并为您构建部署包。

如果您正在寻找这方面的完整教程,I wrote one for Python Lambda functions here.

为了解决这个特殊问题,我们使用了一个名为 juniper 的库。简而言之,您需要做的就是创建一个非常简单的清单文件,如下所示:

functions:
  # Name the zip file you want juni to create
  router:
    # Where are your dependencies located?
    requirements: ./src/requirements.txt.
    # Your source code.
    include:
    - ./src/lambda_function.py

在此清单文件中,调用 juni build 将为您创建 zip 文件工件。该文件将包含您在 requirements.txt.

中指定的所有依赖项

该命令将创建此文件 ./dist/router.zip。我们将该文件与 sam 模板结合使用。但是,您随后可以使用该 zip 并将其上传到控制台,或通过 awscli。

我也为此苦苦挣扎了一段时间。在深入研究 aws 资源后,我了解到 aws 上的 lambda 函数在 linux 上本地运行。 python 包版本与 linux 版本匹配非常重要。

您可以在以下位置找到更多相关信息: https://aws.amazon.com/lambda/faqs/

按照步骤下载版本。 1.从pypi找到包的.whl镜像,下载到本地。 2. 压缩包并将它们添加为 aws lambda 中的图层 3. 将层添加到 lambda 函数中。

注意:请确保您尝试安装 python 软件包的版本与 aws lambda 执行计算任务的 linux os 匹配。

参考资料: https://pypi.org/project/Pandas3/#files

很多 python 库可以通过此处的图层导入:https://github.com/keithrozario/Klayers,或者您可以使用像无服务器这样的框架,它有插件将包直接打包到您的工件中。

亚马逊创建了一个存储库来处理您的情况: https://github.com/awsdocs/aws-lambda-developer-guide/tree/master/sample-apps/blank-python

空白应用程序是一个关于如何根据要求推送 lambda 函数的示例,以及亚马逊提供的奖励。

您需要做的就是一步一步来,并根据您的需要更新存储库。