我正在按照教程使用Python创建一个Alexa应用程序:
我能够成功完成所有步骤并使应用程序正常工作。我现在想要修改python代码并使用外部库,例如import requests
或我使用pip安装的任何其他库。如何设置我的lambda函数以包含我在本机上本地安装的任何pip包?
答案 0 :(得分:15)
official documentation非常好。简而言之,您需要创建一个目录的zip文件,其中包含lambda函数的代码和您在顶层使用的所有外部库。
您可以通过停用virtualenv来模拟它,将所有必需的库复制到工作目录中(如果在命令行上调用脚本,则始终在sys.path
中),并检查脚本是否仍然有效。
答案 1 :(得分:14)
正如Amazon官方文档链接here中所描述的那样,只需在您拥有python lambda代码的文件夹中安装所需的软件包之后创建所有文件夹内容的zip即可。
正如Vineeth在他的评论中指出的那样,从内联代码编辑器转换为zip文件上载方法的第一步是在配置设置下更改lambda函数处理程序名称以包含保存lambda的python脚本文件名处理程序。
lambda_handler => {您的Python脚本文件名} .lambda_handler
python-lambda和lambda-uploader等其他解决方案有助于简化上传过程,最重要的是本地测试。这些将节省大量的开发时间。
答案 2 :(得分:7)
答案 3 :(得分:3)
回应@ d3ming的答案,框架是一个很好的方法。手动创建部署包是不可能的,但是您需要上传您的包裹'已编译的代码,如果您在非Linux系统上编译该代码,则系统与Lambda函数部署环境之间存在差异的可能性很高。
然后,您可以通过在Linux机器或Docker容器上编译代码来解决这个问题。但是在所有这些复杂性之间,您可以通过采用框架获得更多。
Serverless很好地被采用并支持自定义python包。它甚至与Docker集成以编译您的python依赖项并为您构建部署包。
如果您正在寻找有关此问题的完整教程I wrote one for Python Lambda functions here.
答案 4 :(得分:0)
为解决此特定问题,我们使用了一个名为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。
答案 5 :(得分:0)
我为此也挣扎了一段时间。在深入研究aws资源之后,我了解了aws上的lambda函数在Linux上本地运行。拥有与linux版本匹配的python软件包版本非常重要。
您可能会在以下位置找到更多信息: https://aws.amazon.com/lambda/faqs/
按照步骤下载版本。 1.从pypi找到软件包的.whl映像,然后将其下载到本地。 2.压缩软件包并将其添加为aws lambda中的图层 3.将层添加到lambda函数。
注意:请确保您要安装python软件包的版本与aws lambda执行计算任务的linux操作系统匹配。
答案 6 :(得分:0)
可以在https://github.com/keithrozario/Klayers处通过Layers导入很多python库,或者您可以使用无服务器之类的框架,该框架具有将包直接打包到您的工件中的插件。
答案 7 :(得分:0)
Amazon创建了一个处理您的情况的存储库: https://github.com/awsdocs/aws-lambda-developer-guide/tree/master/sample-apps/blank-python
空白应用程序是一个示例,该示例演示了如何根据需要推送lambda函数以及Amazon带来的好处。
您需要做的就是逐步进行操作,并根据需要更新存储库。