Kin*_*ngz 40 python numpy amazon-s3 pandas aws-lambda
我一直在尝试在导入pandas的AWS Lambda中运行我的代码.所以这就是我所做的.我有一个python文件,其中包含一个简单的代码如下(此文件具有lambda处理程序)
import json
print('Loading function')
import pandas as pd
def lambda_handler(event, context):
return "Welcome to Pandas usage in AWS Lambda"
Run Code Online (Sandbox Code Playgroud)
但是当我在AWS Lambda中测试lambda函数时,我得到以下错误:
Unable to import module 'lambda_function': Missing required dependencies ['numpy']
Run Code Online (Sandbox Code Playgroud)
我已经在压缩包中有numpy,但我仍然得到这个错误.我试着按照Pandas和AWS Lambda给出的提示但没有运气.
有没有人遇到过同样的问题.非常感谢任何暗示或建议来解决这个问题.
谢谢
编辑:我终于弄清楚如何在AWS Lambda python 3.6运行时环境中运行pandas&numpy.
我已将部署包上传到以下repo:
git clone https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy.git
只需lambda_function.py运行以下命令即可将您添加到zip文件:
zip -ur lambda.zip lambda_function.py
上传到S3并发送到lambda.
原版的:
我让Pandas在lambda函数中工作的唯一方法是在AWS Linux EC2实例中编译pandas(和numpy)库,遵循本博文中的步骤,然后使用python 2.7运行时为我的lambda函数.
要将numpy包含在lambda zip中,请遵循AWS文档中此页面上的说明...
如何将带有已编译二进制文件的Python软件包添加到我的部署软件包中,并使该软件包与AWS Lambda兼容?
以numpy为例来解释说明:
选择下载文件。
下载:
对于Python 2.7,模块名称版本-cp27-cp27mu-manylinux1_x86_64.whl
例如numpy-1.15.2-cp27-cp27m-manylinux1_x86_64.whl
对于Python 3.6,模块名称版本-cp36-cp36m-manylinux1_x86_64.whl
例如numpy-1.15.2-cp36-cp36m-manylinux1_x86_64.whl
unzip numpy-1.15.2-cp36-cp36m-manylinux1_x86_64.whl
解压wheel文件后,您的部署包将与Lambda兼容。
希望一切都有道理;)
最终结果可能看起来像这样。注意:您不应在部署软件包中包含whl文件。
AWS Lambda 使用 Amazon Linux操作系统。想法是下载与Amazon Linux兼容的Pandas和NumPy。您下载的内容特定于 Windows 或 Mac。您需要下载适用于 Linux 的兼容版本,以便您的 Lambda 函数可以理解它。这些文件称为文件。pipwheel
使用lambda_function.py文件创建新的本地目录。使用 pip 将 Pandas 安装到本地目录:
$ pip install -t . pandas
Run Code Online (Sandbox Code Playgroud)
导航到https://pypi.org/project/pandas/#files。搜索并下载最新的*manylinux1_x86_64.whl软件包。就我而言,我在 Lambda 函数上使用 Python 3.6,因此我下载了以下内容:
将 whl 文件下载到lambda_function.py. 删除pandas,numpy和*.dist-info目录。解压缩 whl 文件。
$ 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
Run Code Online (Sandbox Code Playgroud)
删除 whl 文件*.dist-info、 和__pycache__. 准备zip.zip存档:
$ rm -r *.whl *.dist-info __pycache__
$ zip -r zip.zip .
Run Code Online (Sandbox Code Playgroud)
zip.zip在您的 Lambda 函数中上传文件。
来源:https : //medium.com/@korniichuk/lambda-with-pandas-fd81aa2ff25e
经过大量研究,我得以使其与Lambda图层一起使用。
创建或打开一个干净的目录,然后按照以下步骤操作:
先决条件:确保已启动并运行Docker
Run Code Online (Sandbox Code Playgroud)pandas==0.23.4 pytz==2018.7
Run Code Online (Sandbox Code Playgroud)#!/bin/bash export PKG_DIR="python" rm -rf ${PKG_DIR} && mkdir -p ${PKG_DIR} docker run --rm -v $(pwd):/foo -w /foo lambci/lambda:build-python3.6 \ pip install -r requirements.txt --no-deps -t ${PKG_DIR}
Run Code Online (Sandbox Code Playgroud)chmod +x get_layer_packages.sh ./get_layer_packages.sh zip -r pandas.zip .
将图层上传到S3存储桶。
通过运行以下命令将层上传到AWS:
Run Code Online (Sandbox Code Playgroud)aws lambda publish-layer-version --layer-name pandas-layer --description "Description of your layer" --content S3Bucket*=<bucket name>*,S3Key=*<layer-name>*.zip --compatible-runtimes python3.6 python3.7
转到Lambda控制台,并将您的代码作为zip文件上传或使用内联编辑器。
单击图层>添加图层>从兼容图层中搜索图层(熊猫图层),然后选择版本。
还要添加AWSLambda-Python36-SciPy1x图层,默认情况下该图层可用于导入numpy。
感谢这篇中等文章https://medium.com/@qtangs/creating-new-aws-lambda-layer-for-python-pandas-library-348b126e9f3e
在尝试使用 python3.6 引擎时,我一直在努力解决类似的错误。当我切换到 2.7 时,它对我来说工作得很好。我使用 Amazon AMI 创建 zip 文件,但它只有 python3.5,而不是 3.6。我猜是版本不匹配的原因。但这只是一个猜测,我还没有在 python3.6 安装上尝试过这个过程。
| 归档时间: |
|
| 查看次数: |
13863 次 |
| 最近记录: |