问题: 我想在我的AWS lambda函数中使用Numpy和Pandas。我正在使用PyCharm在Windows 10上工作。我的函数可以在本地计算机上编译并正常工作,但是,一旦将其打包并部署到AWS上,它就会崩溃,从而给导入numpy和pandas软件包带来错误。我尝试重新安装两个软件包,然后重新部署,但是错误仍然相同。
StackOverFlow解决方案: 其他人也有类似的问题,其他用户则认为这主要是兼容性问题,因为Python库是在Windows上编译的,而AWS Lambda是在Linux计算机上运行的。
问题: 在Windows 10上为AWS创建部署程序包的最佳方法是什么?通过PIP安装软件包时,是否可以指定目标平台?显然,pip标签中有一个选项--platform,但我不知道如何使用它。有帮助吗?
答案 0 :(得分:2)
您需要的是压缩代码,然后将其上传。
zip -r9 ../function.zip .
zip -g function.zip function.py
aws lambda update-function-code --function-name python37 --zip-file fileb://function.zip
(这里的函数名称为python37)
要使用zip
命令,最简单的方法是使用 cygwin 或使用 Linux的Windows子系统,但是zip
命令只是一个用于压缩文件的命令工具,任何GUI压缩工具也都可以使用。
答案 1 :(得分:1)
我也有一个类似的问题(如何在lambda函数中使用numpy)。
James提供了一个最近的答案,现在比以前更容易:AWS现在为SciPy提供了一个“本地”(即AWS提供)层,您可以在定义时将其简单地配置为添加为一个层您的功能。
在此处放置指向他的答案的链接,以供那些首先遇到此话题的人(如我)
...因此,当您仍然使用图层时,您不再需要自己构建/维护/安装自己的SciPy图层,而只需使用AWS提供的图层。
所以现在是一个更好的解决方案。
答案 2 :(得分:0)
通常,不只一种解决方案。
imho的首选方法是使用AWS lambda层,因为它将功能代码与依赖项分开。 here对此基础进行了说明。
答案 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完成的)