从AWS Lambda/tmp目录导入python包

2024-06-17 14:47:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图上传一个zip文件,其中大部分包含python包,大小为300MB到awslambda。我清楚地理解,如果我们直接使用awsdk上传的话,这超出了可以上传到Lambda的zip的限制。因此,这是行不通的。在

为了克服这个问题,我决定下载/tmp目录中的包并将它们导入主文件(引用here)。我将所需的包压缩为pkgs.zip,并将其上载到aws3。然后我使用requests下载它们,将它们提取到/tmp/。在

def get_pkgs(url):
    import requests
    import io
    import zipfile
    print("Getting Packages...")
    re = requests.get(url)
    z = zipfile.ZipFile(io.BytesIO(re.content))
    print("Extracting Packages...")
    z.extractall("/tmp/")
    print("Packages are downloaded and extracted.")

def attempt_import():
    print("="*50)
    print("ATTEMPT TO IMPORT DEPENDENCIES...")
    print("="*50)
    import numpy
    import scipy
    import six
    print("IMPORTING DONE.")

def main():
    URL = "https://s3-ap-southeast-1.amazonaws.com/BUCKET_NAME/pkgs.zip"
    get_pkgs(URL)
    attempt_import()

def lambda_handler(event, context):
    main()
    return "Hello Lambda"

但是,当我测试lambda函数时,它返回一个错误,说明找不到numpy

Import Error: No module named numpy

我的问题是,如何从/tmp/目录导入所需的包?

提前谢谢。在


Tags: 文件lambdaioimportnumpy目录urlget
1条回答
网友
1楼 · 发布于 2024-06-17 14:47:51

在导入任何已下载到/tmp文件夹(例如/tmp/requirements文件夹)之前,必须告诉系统在那里查找依赖关系。在代码的开头,就在这几行:

import sys

sys.path.insert(0, '/tmp/requirements/') # Or any path you desire

相关问题 更多 >