上传到 AWS Lambda 时 Zipfile 的问题

Zipfile's issue when uploading to AWS Lambda

我正在尝试压缩我的代码,但特别是两个文件夹,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。因此,我相信这是由于我使用 zipfiles 的方式所致。有人知道为什么吗?

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

project-lambda-preSignUpTrigger
- main
- pymysql

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

main
pymysql

所以你可以修改第三个参数并且不往回走那么远:

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

注意:我删除了 /..