【问题标题】:Zipfile's issue when uploading to AWS Lambda上传到 AWS Lambda 时 Zipfile 的问题
【发布时间】:2021-09-14 10:44:49
【问题描述】:

我正在尝试压缩我的代码,但特别是两个文件夹,main 和 pymysql。我正在使用以下代码创建一个似乎结构正确的文件夹。

import os
import zipfile

def zipit(folders, zip_filename):
    zip_file = zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED)

    for folder in folders:
        for dirpath, dirnames, filenames in os.walk(folder):
            for filename in filenames:
                zip_file.write(
                    os.path.join(dirpath, filename),
                    os.path.relpath(os.path.join(dirpath, filename), os.path.join(folders[0], '../..')))

    zip_file.close()


folders = [
    "main",
    "pymysql"]

if __name__ == "__main__":
    zipit(folders, "project-lambda-preSignUpTrigger.zip")

当我提取上面的文件时,我得到的东西看起来像这样(目录 1)

project-lambda-preSignUpTrigger
- main
- pymysql

这看起来是正确的。但是,当我将 zip 文件上传到 AWS lambda 时,结果是这样的。 (目录2)

project-lambda-preSignUpTrigger
- project-lambda-preSignUpTrigger
-- main
-- pymysql

现在我认为这可能是一个 aws lambda 问题,但我更正了那里的文件结构并将其导出为一个 zip,它为我提供了一个与目录 1 相同的文件。我上传了这个 zip 并按照我的需要上传像目录 1。因此,我相信这是由于我使用 zipfile 的方式。有人知道为什么吗?

【问题讨论】:

    标签: python aws-lambda zipfile


    【解决方案1】:

    生成的 zip 文件是什么样的,尤其是里面的目录结构。从您提取的输出看来:

    project-lambda-preSignUpTrigger
    - main
    - pymysql
    

    从 AWS lambda 我假设它应该列出文件夹“main”等(没有嵌套):

    main
    pymysql
    

    所以你可以修正第三个论点,然后再往前走:

    os.path.relpath(os.path.join(dirpath, filename), os.path.join(folders[0], '..')))
    

    注意:我删除了/..

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 1970-01-01
      • 2018-11-21
      • 2017-04-07
      • 2018-07-12
      • 2021-02-28
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多