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

7
我正在尝试将我的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中调用。但是,尽管我已经将numpy库安装到该文件夹中,仍然出现错误无法导入模块'Twilio_Alerts_AWS':缺少必需的依赖项['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电脑。

4个回答

9

这里的答案帮助了我:Pandas在AWS Lambda中出现numpy错误

简单来说,被编译在mac上的库不能在linux上运行,因此您需要确保以某种方式获取适用于linux的版本(例如Docker)。


Windows 也是这样吗? - thepurpleowl

2

1
这里有一种在AWS Lambda中仅提供Numpy的简单方法:只需将由Amazon公开提供的scipy-numpy层添加到您的lambda函数中(在AWS Lambda中:层->添加层->numpy scipy层应该已经被建议)。
如果您遇到需要编译的多个软件包的问题,我想添加一个提示,即可以使用一个有用的Docker容器来获取Linux所需的软件包编译: https://hub.docker.com/r/lambci/lambda/

还有其他解决编译问题的方法,其中之一是使用 serverless-python-requirements npm 包,如果您在项目中使用 serverless。

但是我的经验是,如果您在自定义的 gitlab-runner 中运行 serverless deploy 命令,并且使用了 serverless 和 serverless-python-requirements(用于 ci/cd 目的),这种方法可能无法正常工作。

在这种情况下,我目前正在使用 AWS Lambda 层来提供所需的依赖项。这里有一个很好的解释,用于创建 pandas 层: https://medium.com/@qtangs/creating-new-aws-lambda-layer-for-python-pandas-library-348b126e9f3e

我的回答可能过于详细,但上述提到的选项可能对其他阅读此处的读者有用。


0

它解决了我在numpy方面的问题。 - Julie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接