我正在尝试在aws lambda中导入python部署包。 python代码使用numpy。我按照虚拟环境的部署包说明进行操作,但它仍然给出了Missing所需的依赖关系[' numpy']。我按照stack overflow上给出的指令(跳过共享库的第4步,找不到任何共享库)但没有运气。有什么建议让它发挥作用吗?
答案 0 :(得分:1)
最简单的方法是使用AWS Cloud9,无需启动EC2实例并准备部署程序包。
转到Application文件夹,对我来说这是
cd App
安装软件包(我们必须在虚拟环境中使用pip,因为默认pip指向/ usr / bin / pip,而这是python 2.7)
venv/bin/pip install numpy -t .
您可以通过编辑lambda_function.py文件来测试安装:
import numpy as np
def lambda_handler(event, context):
return np.sin(1.0)
保存更改,然后单击屏幕顶部的绿色“运行”按钮
Lambda执行后,我得到:
Response
0.8414709848078965
Lambda函数应该可见,名称格式为
cloud9-ApplicationName-FunctionName-RandomString
答案 1 :(得分:0)
使用Numpy真的很痛苦。
Numpy需要在运行的同一个操作系统上正确编译。这意味着您需要在AMI映像上安装/编译Numpy,以便在Lambda中正确运行。
最简单的方法是启动一个小型EC2实例并将其安装在那里。然后复制编译后的文件(来自/ usr / lib / python / site-packages / numpy)。这些是您需要包含在Lambda包中的文件。
我相信您也可以使用serverless工具来实现这一目标。
答案 2 :(得分:0)
NumPy必须在将运行它的平台上编译。最简单的方法是使用Docker。 Docker有一个lambda容器。使用lambda容器在Docker中本地编译NumPy,然后推送到AWS lambda。
如果您想要一个简单的解决方案,serverless框架会为您处理所有这些。见https://stackoverflow.com/a/50027031/1085343
答案 3 :(得分:0)
我遇到了同样的问题,pip安装不适用于我。最终,我发现一些关于此问题here和here的晦涩文章。他们建议去pypi,下载.whl文件(选择py版本和manylinux1_x86_64),然后上载并解压缩。这才是最终为我工作的东西。如果没有其他办法对您有用,我建议您尝试一下。
答案 4 :(得分:-1)
对于Python 3.6,您可以按照已经建议的方式使用Docker映像。此处的完整说明:https://medium.com/i-like-big-data-and-i-cannot-lie/how-to-create-an-aws-lambda-python-3-6-deployment-package-using-docker-d0e847207dd6
关键是:
docker run -it dacut / amazon-linux-python-3.6