我正在寻找在AWS Lambda中使用NumPy的方法。 我没有使用EC2,只是用lambda进行此操作,如果有任何建议,将不胜感激。当前出现以下错误:
无法导入名称'multiarray'
使用grunt lambda创建zip文件并上传函数代码。 我使用pip install和requirements.txt文件将所有模块安装到名为python_modules的文件夹中,其中包括NumPy。
我正在寻找在AWS Lambda中使用NumPy的方法。 我没有使用EC2,只是用lambda进行此操作,如果有任何建议,将不胜感激。当前出现以下错误:
无法导入名称'multiarray'
使用grunt lambda创建zip文件并上传函数代码。 我使用pip install和requirements.txt文件将所有模块安装到名为python_modules的文件夹中,其中包括NumPy。
让您的lambda函数支持Python 3.7中的numpy库的简便方法:
现在您的lambda函数已准备好支持numpy了。
更新内容包括解决方案,而非链接:
经过多次尝试,我发现必须从 python3.6虚拟环境中 创建部署包,而不是直接从主机创建。我在Ubuntu 16.04 docker镜像中执行了以下操作。这假定您已经安装/配置了python3.6、virtualenv和awscli,并且lambda函数代码位于~/lambda_code目录中:
1) cd ~
(我们将在主目录中构建虚拟环境)
2) virtualenv venv --python=python3.6
(创建虚拟环境)
3) source venv/bin/activate
(激活虚拟环境)
4) pip install numpy
5) cp -r ~/venv/lib/python3.6/site-packages/* ~/lambda_code
(将所有安装的软件包复制到lambda_code目录的根级别。这将包括一些不必要的文件,但如果需要的话,您可以自己删除这些文件)
6) cd ~/lambda_code
7) zip -r9 ~/package.zip .
(压缩lambda包)
8) aws lambda update-function-code --function-name my_lambda_function --zip-file fileb://~/package.zip
(上传至AWS)
现在,您的lambda函数应该能够无问题地导入numpy。
如果您想要一个更为开箱即用的解决方案,可以考虑使用serverless来部署lambda函数。在我找到以上解决方案之前,我遵循了这里的指南,并成功地在python3.6 lambda函数中运行了numpy。
截止2018年,最好只使用内置的图层功能。
AWS实际上已经发布了一个带有NumPy的预制图层:https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/
我无法找到使用无服务器插件的好解决方案,但是我通过层找到了一个好方法。请参见Serverless - Numpy - Unable to find good bind path format
按照以下方式添加numpy层:
进入您的lambda函数
选择添加新层
使用此ARN添加它:arn:aws:lambda:eu-central-1:770693421928:layer:Klayers-p39-numpy:7
(如果您不在eu-central-1,请更改您的区域)
让我知道是否有效。
1.) 在本地机器上的文件夹中执行Pip安装numpy。
2.) 完成后,将整个文件夹压缩并创建一个zip文件。
3.) 转到AWS Lambda控制台,创建一个层并上传在步骤2中创建的zip文件,然后保存该层。
4.) 创建Lambda函数后,单击添加层并添加您创建的层。就这样,导入numpy就可以开始工作了。