【问题标题】:importing python package from AWS Lambda /tmp directory从 AWS Lambda /tmp 目录导入 python 包
【发布时间】:2018-07-23 04:54:30
【问题描述】:

我正在尝试将 300MB 大小的 zip 文件上传到 AWS Lambda,该文件主要包含 python 包。我清楚地知道,如果我们直接使用 AWS SDK 上传,这超出了可以上传到 Lambda 的 zip 的限制。因此,这是行不通的。

为了克服这个问题,我决定下载/tmp 目录中的包并将它们导入主文件(参考here)。我将所需的包压缩为 pkgs.zip 并将其上传到 AWS S3。然后我使用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/ 目录中导入所需的包?

提前致谢。

【问题讨论】:

标签: python amazon-web-services aws-lambda


【解决方案1】:

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

import sys

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2020-05-02
    • 2016-12-27
    • 2012-07-08
    相关资源
    最近更新 更多