如何为AWS Lambda安装Numpy和Pandas?

时间:2018-12-17 23:46:13

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

问题: 我想在我的AWS lambda函数中使用Numpy和Pandas。我正在使用PyCharm在Windows 10上工作。我的函数可以在本地计算机上编译并正常工作,但是,一旦将其打包并部署到AWS上,它就会崩溃,从而给导入numpy和pandas软件包带来错误。我尝试重新安装两个软件包,然后重新部署,但是错误仍然相同。

StackOverFlow解决方案: 其他人也有类似的问题,其他用户则认为这主要是兼容性问题,因为Python库是在Windows上编译的,而AWS Lambda是在Linux计算机上运行的。

问题: 在Windows 10上为AWS创建部署程序包的最佳方法是什么?通过PIP安装软件包时,是否可以指定目标平台?显然,pip标签中有一个选项--platform,但我不知道如何使用它。有帮助吗?

5 个答案:

答案 0 :(得分:2)

您需要的是压缩代码,然后将其上传。

打包所有依赖项

zip -r9 ../function.zip .

打包您的功能

zip -g function.zip function.py

更新为lambda

aws lambda update-function-code --function-name python37 --zip-file fileb://function.zip (这里的函数名称为python37)

对于Windows用户

要使用zip命令,最简单的方法是使用 cygwin 或使用 Linux的Windows子系统,但是zip命令只是一个用于压缩文件的命令工具,任何GUI压缩工具也都可以使用。

参考

答案 1 :(得分:1)

我也有一个类似的问题(如何在lambda函数中使用numpy)。

James提供了一个最近的答案,现在比以前更容易:AWS现在为SciPy提供了一个“本地”(即AWS提供)层,您可以在定义时将其简单地配置为添加为一个层您的功能。

在此处放置指向他的答案的链接,以供那些首先遇到此话题的人(如我)

...因此,当您仍然使用图层时,您不再需要自己构建/维护/安装自己的SciPy图层,而只需使用AWS提供的图层。

所以现在是一个更好的解决方案。

答案 2 :(得分:0)

通常,不只一种解决方案。

imho的首选方法是使用AWS lambda层,因为它将功能代码与依赖项分开。 here对此基础进行了说明。

  1. 获取所有依赖项。就像您正确提到的那样,必须为AMI Linux编译pandas和numpy。可以使用工具“无服务器python要求”或基于此image的docker容器来完成。可以找到更详细的说明here
  2. 将依赖项放入名为python的文件夹中。
  3. 压缩整个文件夹,例如预先安装的Windows压缩工具。
  4. 将zip文件作为图层上传到AWS:转到AWS Lambda,从左侧选择“图层”,然后选择“创建新图层”。
  5. 保存图层后,转到Lambda函数并选择“图层”。单击“添加图层”,选择新创建的图层,然后单击保存。现在,您的函数不再会出现导入错误。

答案 3 :(得分:0)

Numpy和Pandas都可以在此处作为公共层使用:https://github.com/keithrozario/Klayers

正如您提到的那样,很难在Windows上构建它,通常您需要Linux系统来构建python需求,或者将其构建在docker容器中。

我不是Windows 10用户,但是我猜您可以使用WSL(Linux的Windows子系统)在本地构建需求并压缩需求,然后再将其用作层。不过,为了节省麻烦,我只想使用前面提到的公共层。

完全公开:我拥有发布这些图层的仓库。这是一个免费项目-但有一个缺点。如果软件包的新版本(或其依赖项之一)已升级,则删除旧层。一般来说,如果您使用最新的图层版本,则可以保证至少要在30天之前删除该图层。使用已删除图层的功能仍然可以使用,但是您将无法在旧图层上部署新版本的功能。

希望可以解决所有问题。

答案 4 :(得分:0)

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

空白应用程序是一个示例,该示例演示了如何根据需要推送lambda函数以及Amazon带来的好处。

一个问题:它使用bash脚本,因此您需要调整它们或使用WSL使其工作。 (我非常有信心它可以在Windows上使用,大部分工作是由aws cli完成的)