AWS lambda中的Pandas出现numpy错误

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)
  1. 我已将此python文件与numpy,pandas和pytz库一起压缩为部署包(在Amazon EC2 linux机器中完成所有这些)
  2. 然后将包上传到S3
  3. 创建了一个lambda函数(runtime = python3.6)并从S3上传了部署包

但是当我在AWS Lambda中测试lambda函数时,我得到以下错误:

Unable to import module 'lambda_function': Missing required dependencies ['numpy']
Run Code Online (Sandbox Code Playgroud)

我已经在压缩包中有numpy,但我仍然得到这个错误.我试着按照Pandas和AWS Lambda给出的提示但没有运气.

有没有人遇到过同样的问题.非常感谢任何暗示或建议来解决这个问题.

谢谢

pbe*_*gle 9

编辑:我终于弄清楚如何在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函数.

  • 如果有人想出来的话,很想知道如何在python 3.6运行时环境中完成它! (2认同)
  • 我写了一篇关于如何做到的博客文章.请查看:https://medium.com/i-like-big-data-and-i-cannot-lie/how-to-create-an-aws-lambda-python-3-6-deployment-package-使用 - 泊坞窗 - d0e847207dd6 (2认同)

chi*_*him 6

要将numpy包含在lambda zip中,请遵循AWS文档中此页面上的说明...

如何将带有已编译二进制文件的Python软件包添加到我的部署软件包中,并使该软件包与AWS Lambda兼容?

以numpy为例来解释说明:

  1. 在pypi.org上打开模块页面。 https://pypi.org/project/numpy/
  2. 选择下载文件。

  3. 下载:

对于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

  1. 解压缩wheel文件到/ path / to / project-dir文件夹。您可以在命令行上使用unzip命令执行此操作。显然还有其他方法。

unzip numpy-1.15.2-cp36-cp36m-manylinux1_x86_64.whl

解压wheel文件后,您的部署包将与Lambda兼容。

希望一切都有道理;)

最终结果可能看起来像这样。注意:您不应在部署软件包中包含whl文件。

它可能看起来像什么

  • 我面临着同样的问题,当我像这个熊猫一样复制 numpy 时给出了这个错误 - C 扩展:没有名为 'pandas._libs.tslibs.conversion' 的模块未构建。如果您想从源目录导入熊猫,您可能需要先运行“python setup.py build_ext --inplace --force”来构建 C 扩展。- 关于这个的任何想法 (2认同)

kor*_*huk 6

AWS Lambda 使用 Amazon Linux操作系统。想法是下载与Amazon Linux兼容的PandasNumPy。您下载的内容特定于 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. 删除pandasnumpy*.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


Ran*_*uha 6

经过大量研究,我得以使其与Lambda图层一起使用。

创建或打开一个干净的目录,然后按照以下步骤操作:

先决条件:确保已启动并运行Docker

  1. 创建带有以下内容的requirements.txt文件:
pandas==0.23.4
pytz==2018.7
Run Code Online (Sandbox Code Playgroud)
  1. 使用以下命令创建一个get_layer_packages.sh文件:
#!/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)
  1. 在同一目录中运行以下命令:
chmod +x get_layer_packages.sh

./get_layer_packages.sh

zip -r pandas.zip .
Run Code Online (Sandbox Code Playgroud)
  1. 将图层上传到S3存储桶。

  2. 通过运行以下命令将层上传到AWS:

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
Run Code Online (Sandbox Code Playgroud)
  1. 转到Lambda控制台,并将您的代码作为zip文件上传或使用内联编辑器。

  2. 单击图层>添加图层>从兼容图层中搜索图层(熊猫图层),然后选择版本。

  3. 还要添加AWSLambda-Python36-SciPy1x图层,默认情况下该图层可用于导入numpy。

从控制台选择层

  1. 测试代码。它应该现在工作!!!

感谢这篇中等文章https://medium.com/@qtangs/creating-new-aws-lambda-layer-for-python-pandas-library-348b126e9f3e


Pav*_*nni 0

在尝试使用 python3.6 引擎时,我一直在努力解决类似的错误。当我切换到 2.7 时,它对我来说工作得很好。我使用 Amazon AMI 创建 zip 文件,但它只有 python3.5,而不是 3.6。我猜是版本不匹配的原因。但这只是一个猜测,我还没有在 python3.6 安装上尝试过这个过程。