上传到 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], '..')))
注意:我删除了 /..
我正在尝试压缩我的代码,但特别是两个文件夹,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], '..')))
注意:我删除了 /..