无法导入模块“lambda_function”:没有名为“pandas”的模块

新手上路,请多包涵

开始 RequestId:3d5691d9-ad79-4eed-a26c-5bc3f1a23a99 版本:$LATEST 无法导入模块“lambda_function”:没有名为“pandas”的模块

结束 RequestId:3d5691d9-ad79-4eed-a26c-5bc3f1a23a99

我使用 Windows 7 64 位作为主机操作系统。

我想做的事

我只是想在 AWS-Lambda 环境中使用 pandas。就像我在windows环境下使用它一样,我正在为Lambda寻找一个简单的解决方案。

到目前为止我尝试了什么

  • 在虚拟盒子上安装 Xubuntu。
  • 在虚拟机上的 Xubuntu 中创建一个名为 myvenv 的虚拟环境。
  • 然后我在 myvenv 中安装了 pandas3.6。
  • 此后,我将位于 myvenv 位置 '/usr/local/lib/python3.6/site-packages/' 的文件夹内容复制到我的主机操作系统。
  • 在主机操作系统(Windows 7)中,我创建了一个名为 packs 的文件夹,粘贴了 myvenv 的内容。
  • 在主机操作系统 (Windows 7) 的 packs 中创建了一个 lambda_function.py 脚本
  • 然后我压缩文件夹 packs 使用7zip软件并将其上传为 zipLambda
  • 在 Lambda 中,lambda 函数处理程序名称是 lambda_handler() 。代码片段看起来像,

将熊猫导入为 pd

 def lambda_handler(event, context):

    dates = pd.date_range('2019001', periods=6)

    df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
    print(df)

  • 处理程序命名为 lambda_function.lambda_handler 。我已授予 lambda 角色 AWSLambdaFullAccess 权限。
  • 超时设置为 4 分 3 秒。
  • 测试事件看起来像

{ “key1”:“如果一切正常,这将被打印出来” }

我尝试了以下解决方案:

  • 这里 尝试了 pandas 和 numpy 的预编译 linux 兼容二进制文件——运气不好。
  • 在 Lambda 中,将 Handler info 更改为 python_filename.function_name 。就我而言,它是 lambda_function.lambda_handler -- failed with no module named ‘pandas’ 错误
  • 将lambda函数放在根文件夹中,使用7zip软件压缩文件夹并将文件夹上传到S3存储桶。对于我的情况,我将函数放在位置 python\lib\python3.6\site_packages\lambda_function.py failed with no module named ‘pandas’ 错误
  • 已经尝试过发布在 SO, 1 , 2 , 3 , 4 , 5 , 6 上的这些相关解决方案

注:我不想用Docker,因为我不知道怎么用,也不愿意学,现在气死我了。我来自 Windows 环境( 很糟糕,我现在知道了。

关于如何让它发挥作用的任何想法。

原文由 mnm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 581
2 个回答

我能够使用 Lambda 层和 Amazon linux Cloud 9 实例成功导入熊猫库。有我在 Cloud 9 实例中执行的命令和 Lambda 函数的输出。我不得不稍微更改代码,因为它因导入错误和字符串值错误而失败。

或者,这些命令也可以在 EC2 实例中执行。如果无法在 Windows 上使用 SAM CLI (它使用 docker)或只是普通的 docker,我们将需要使用 Amazon Linux 实例来构建所有内容,因为这是 AWS Lambda 目前使用 的。我不相信使用 ubuntu 实例会在这里工作。

命令

 python --version
Python 3.6.8

# https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
# python 3.6 uses Amazon Linux currently

mkdir project
cd project
virtualenv v-env
source ./v-env/bin/activate
pip install pandas
deactivate

# creating layer
# https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path
mkdir python
cd python
cp -r ../v-env/lib64/python3.6/dist-packages/* .
cd ..
zip -r panda_layer.zip python
aws lambda publish-layer-version --layer-name pandas --zip-file fileb://panda_layer.zip --compatible-runtimes python3.6

publish-later-version 命令将在命令或 CLI 配置文件 中给定的区域中创建一个新的 AWS Lambda 层

Lambda 层会将库应用于 Lambda 函数的代码,而无需将其直接应用于部署包。这也允许在 Lambda 中使用在线代码编辑器,因为部署包低于 3MB 的限制

我通过单击 Web 控制台中的层按钮并选择我最近发布的层版本来应用 Lambda 层。我在那里有第二个版本,因为我第一次尝试这是放置 lib 目录的内容,该目录不适用于 64 位操作系统,我的代码在 AWS Lambda 中失败。

lambda 网络控制台

或者,您也可以使用 CLI 命令 update-function-configuration 应用层

我使用的 Lambda 函数代码

 import pandas as pd
import numpy as np

def lambda_handler(event, context):
    dates = pd.date_range(start='1/1/2018', end='1/08/2018')
    df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=list('ABCD'))
    print(str(df))


拉姆达输出

 START RequestId: 27f09b6c-a4cd-49dd-bb3e-ae6fc7cd5850 Version: $LATEST
                   A         B         C         D
2018-01-01 -1.040318  0.450841 -0.381687 -0.105480
2018-01-02 -1.381793 -0.481572  0.828419 -0.885205
2018-01-03  1.437799 -0.649816 -0.577112  0.400670
2018-01-04 -0.730997 -0.778775 -1.514203  1.165661
2018-01-05  1.963595 -1.137054  0.920218  0.960210
2018-01-06 -0.429179 -0.745549  1.482562  0.298623
2018-01-07 -1.082388 -0.529476 -1.051663  1.616683
2018-01-08  0.042779 -2.338471 -0.142992  0.680399
END RequestId: 27f09b6c-a4cd-49dd-bb3e-ae6fc7cd5850
REPORT RequestId: 27f09b6c-a4cd-49dd-bb3e-ae6fc7cd5850  Duration: 536.76 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 122 MB Init Duration: 1721.51 ms
XRAY TraceId: 1-5d741e40-1311daa29fc16c74735988fc   SegmentId: 61a595dd3492c331 Sampled: false

原文由 jmp 发布,翻译遵循 CC BY-SA 4.0 许可协议

要在具有 Python 运行时的 AWS Lambda 环境中使用 pandas,最简单的方法是:

  • 在 Lambda 控制台的代码选项卡中向下滚动
  • “添加图层”
  • 选择“AWS Layers”(从 AWS 提供的层列表中选择一个层)
  • AWSDataWrangler-Python37(包括 pandas

如果您正在使用部署自动化,您将需要找到 ARN。即使在控制台中,您也可能只想采取额外的步骤并选择“指定 ARN”选项,因为“AWS 层”的下拉菜单似乎没有跟上最新的 AWS 层实际上可用。

您可以在 https://serverlessrepo.aws.amazon.com/applications 找到所有 AWS 托管的 Lambda 层的库。如果您在此处搜索 pandas,目前会找到 15 个结果,包括 aws-sdk-pandas-layer-py3-7 (也有 3.8 和 3.9)。如果单击该层的详细信息页面,您将看到该 AWS 托管层的 arn。

您也可以在该详细信息页面上单击“部署”。然后,您可以从 Lambda 控制台的“自定义层”下拉菜单中使用该层。

原文由 Yann Stoneman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进