要在Lambda中获取其他库,我们需要在Amazon Linux上编译它们(如果底层库基于C或C ++,如Numpy,则这很重要),并将它们与要在Lambda中运行的python脚本一起打包为ZIP文件。
获取Amazon Linux编译版本的库。您可以找到某个已经编译过的版本,例如@pbegle编译的版本,也可以自己编译。要自己编译,有两种选择: - 在EC2实例上编译库 https://streetdatascience.com/2016/11/24/using-numpy-and-pandas-on-aws-lambda/ - 在Docker版本的Lambda环境中编译库 https://serverlesscode.com/post/scikitlearn-with-amazon-linux-container/
在使用Docker的最后一个选项之后,可以使用上面博客文章中的说明并通过添加以下内容使其工作:
pip install --use-wheel pandas
在脚本中编译库:
https://github.com/ryansb/sklearn-build-lambda/blob/master/build.sh#L21
略有重复 使用AWS Lambda在NodeJS中找不到MySQL
您需要使用Lambda打包库。由于lambda在公共云上运行,因此无法对其进行配置。
现在在你的情况下,当你使用熊猫时,你需要用你的拉链包装Pandas。获取pandas的路径(例如:/Users/dummyUser/anaconda/lib/python3.6/site-packages)并将库复制到您拥有lambda函数代码的位置。在您的代码中,请参阅本地副本中的pandas。上传时,压缩整套(代码+库),然后上传。它应该工作。
使用创建新的本地目录 lambda_function.py 文件。使用pip将Pandas安装到本地目录:
lambda_function.py
$ pip install -t . pandas
AWS Lambda使用Amazon Linux 操作系统。想法是下载 熊猫 和 NumPy的 兼容 亚马逊Linux 。
大熊猫。导航 https://pypi.org/project/pandas/#files 。搜索并下载最新的 *manylinux1_x86_64.whl 包。在我的情况下,Python 3.6是 大熊猫-0.24.1-CP36-cp36m-manylinux1_x86_64.whl 文件。
*manylinux1_x86_64.whl
NumPy的。为NumPy做同样的事情。档案是 numpy的-1.16.1-CP36-cp36m-manylinux1_x86_64.whl 。
将whl文件下载到目录 lambda_function.py 。去掉 pandas , numpy ,和 *.dist-info 目录。解压缩文件。
pandas
numpy
*.dist-info
$ rm -r pandas numpy *.dist-info $ unzip numpy-1.16.1-cp36-cp36m-manylinux1_x86_64.whl $ unzip pandas-0.24.1-cp36-cp36m-manylinux1_x86_64.whl
删除whl文件, *.dist-info ,和 __pycache__ 。准备 zip.zip 档案:
__pycache__
zip.zip
$ rm -r *.whl *.dist-info __pycache__ $ zip -r zip.zip .
资源: https://medium.com/@korniichuk/lambda-with-pandas-fd81aa2ff25e
在尝试使用python3.6引擎时,我一直在努力解决类似的错误。当我切换到2.7时,它对我来说很好。我使用Amazon AMI创建我的zip文件,但它只有python3.5,而不是3.6。我猜版本不匹配的原因。但这只是一个猜测,我还没有在python3.6安装上尝试过程。
您的代码始终会出现此错误 因为lambda不包含任何外部库,它有一个默认带有Python的库。
的 如果您使用任何外部库,如熊猫,numpy或任何其他。你需要在Aws Lambda上安装该库 强> 在使用它之前
看你的代码
import json print('Loading function') import pandas as pd def lambda_handler(event, context): return "Welcome to Pandas usage in AWS Lambda"
这里没有安装pandas库,所以你的代码不起作用。 我的建议是使用你的代码如下。在lambda函数中写下你所有的代码
import json def lambda_handler(event, context): #install python libray here print('Loading function') import pandas as pd return "Welcome to Pandas usage in AWS Lambda"
的 所以最终代码如下所示 强>
def lambda_handler(event, context): import pip def install(package): if hasattr(pip, 'main'): pip.main(['install', package]) else: pip._internal.main(['install', package]) if __name__ == '__main__': install('pandas') #install python libray here print('Loading function') import pandas as pd return "Welcome to Pandas usage in AWS Lambda"