将numpy安装到目录后,AWS Lambda中缺少必需的依赖项['numpy'],如何修复?

crcmnpdw  于 2023-06-06  发布在  其他
关注(0)|答案(4)|浏览(360)

我正在尝试将我的Python代码上传到AWS Lambda。我一直遵循本指南创建部署包(https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html)。
我在桌面上创建了一个文件夹“project-dir”,并将我的Python文件“Twilio_Alerts_AWS.py”移动到该文件夹中。我使用了命令:

pip install module-name -t /path/to/project-dir

将我的所有库安装到该文件夹中。接下来,我突出显示了所有内容,并通过右键单击文件夹中突出显示的文件来点击“压缩”。这将生成一个名为“archive”的压缩文件
我将'archive.zip'放在AWS上的S3存储桶中,并将其调用到AWS Lambda中。我一直得到错误Unable to import module 'Twilio_Alerts_AWS': Missing required dependencies ['numpy'],即使我已经安装numpy到文件夹。
不知道我做错了什么。
我正在尝试上传的代码:

from twilio.rest import Client
import time
import datetime
import requests
import pandas as pd
from pandas.io.json import json_normalize



def lambda_handler(event, context):
    # Your Account SID from twilio.com/console
    account_sid = "xxx"
    # Your Auth Token from twilio.com/console
    auth_token  = "xxx"

    client = Client(account_sid, auth_token)

    current_datetime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    headers = {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'x-api-key': 'xxx',
        'x-organization-id': 'xxx',
        'x-facility-id': 'xxx',
        'x-user-id': 'xxx',
    }


    orders_staging_api_call = requests.get('URL', headers=headers, verify=False)
    consumers_staging_api_call = requests.get('URL', headers=headers, verify=False)
    inventory_staging_api_call = requests.get('URL', headers=headers, verify=False)

    lst = ["+1234567890"]

    ##Consumers API Alert
    if consumers_staging_api_call.status_code !=200:
        for i in lst:
            message = client.messages.create(
                    to=i, 
                    from_="+1234567890",
                    body="API connection between A and B has failed for: Consumers.Datetime of check:{}".format(current_datetime))
            time.sleep(5)
        print(message.sid)
    else:
        print('done')

编辑:使用osx机器.

ovfsdjhp

ovfsdjhp1#

答案在这里帮助了我:Pandas in AWS lambda gives numpy error
TLDR:在mac上编译的库在linux上不起作用,所以你需要确保以某种方式获得linux版本(例如:Docker)。

628mspwn

628mspwn2#

AWS docs的建议是使用.whl文件作为某些依赖项。
您可以从Python项目下载文件中解包numpy .whl文件,这里有一个更完整的答案
Pandas in AWS lambda gives numpy error - Answer

mwkjh3gx

mwkjh3gx3#

以下是在AWS lambda中提供Numpy的一种简单方法:只需将scipy-numpy层(由Amazon提供)添加到您的lambda函数(在AWS Lambda中:layers -> add layer -> the numpy scipy layer should get suggested already).
如果你有几个需要编译的包的问题,我想给一个有用的docker容器添加一个提示,它可以用来获取为Linux编译的包:https://hub.docker.com/r/lambci/lambda/
还有其他解决编译问题的方法,其中一个是serverless-python-requirements npm-package,如果你在项目中使用serverless的话。但是我经历过,如果你在一个自定义的gitlab-runner中运行serverless deploy命令,并带有serverless和serverless-python-requirements(用于ci/cd目的),这是不起作用的。在这种情况下,我目前使用AWS Lambda Layers来提供所需的依赖项。下面是为pandas创建图层的一个很好的解释:https://medium.com/@qtangs/creating-new-aws-lambda-layer-for-python-pandas-library-348b126e9f3e
我的回答可能有点过头了,但上面提到的选项可能对其他来这里的读者有用。

7dl7o3gd

7dl7o3gd4#

当我导入pandas时,我选择了AWS existing package for pandas。确保正确引用ARN(https://aws-sdk-pandas.readthedocs.io/en/stable/layers.html

相关问题