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

mnm*_*mnm 6 amazon-s3 python-3.x aws-lambda aws-lambda-layers

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

我正在使用Windows 7 64位作为主机OS。

我想做的事

我只想在AWS-Lambda环境中使用熊猫。就像在Windows环境中使用它一样,我正在寻找Lambda的简单解决方案。

到目前为止我尝试过的

  • 在虚拟盒子上安装了Xubuntu。
  • myvenv在virtual-box上的Xubuntu中创建一个虚拟环境。
  • 然后我在中安装了pandas3.6 myvenv
  • 此后,我复制的文件夹的内容myvenv,在位置'/usr/local/lib/python3.6/site-packages/'我的主机操作系统。
  • 在主机操作系统(Windows 7)中,我创建了一个名为的文件夹packs,粘贴了的内容myvenv
  • 在主机OS(Windows 7)中创建了一个lambda_function.py脚本packs
  • 然后我拉上的文件夹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)
Run Code Online (Sandbox Code Playgroud)
  • 该处理程序的名称为lambda_function.lambda_handler。我已授予lambda-role AWSLambdaFullAccess许可。
  • 超时设置为4分3秒。
  • 测试事件看起来像

    {“ key1”:“如果一切正常,将打印此内容”}

我尝试了以下解决方案:

  • 这里尝试了针对pandas和numpy的与Linux兼容的预编译二进制文件-真不走运。
  • 拉姆达,改Handler infopython_filename.function_name。对于我来说,这是lambda_function.lambda_handler - 没有名为“熊猫”的错误模块失效
  • 将lambda函数放在根文件夹中,使用7zip软件压缩该文件夹,然后将该文件夹上载到S3存储桶。就我而言,我将函数放置在python\lib\python3.6\site_packages\lambda_function.py失败的位置,没有名为'pandas'error的模块
  • 已经尝试过张贴在SO,这些相关的解决方案123456

注意:我不想使用Docker,因为我不知道如何使用它,而且由于现在我很生气,所以我不愿意学习它。我来自Windows环境(很糟糕,我现在知道。

关于如何使它起作用的任何想法。

jmp*_*jmp 15

我能够使用 Lambda 层和Amazon linuxCloud 9 实例成功导入 pandas 库。有我在 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 
Run Code Online (Sandbox Code Playgroud)

发布更高版本版本命令将创建一个新的AWS LAMBDA层在命令或者给定的区域配置文件的CLI。

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

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

拉姆达网络控制台

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

我使用的 Lambda 函数代码

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 
Run Code Online (Sandbox Code Playgroud)

拉姆达输出

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  
Run Code Online (Sandbox Code Playgroud)