我试图压缩我的代码,但具体两个文件夹,主要和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相同的文件。我上传了这个压缩文件,它按我想要的方式上传,比如目录1。因此,我认为这是由于我使用zip文件的方式。有人知道为什么吗?
生成的zip-file是什么样子的,特别是其中的目录结构。从您提取的输出中可以看出:
project-lambda-preSignUpTrigger
- main
- pymysql
从AWS lambda中,我假设它应该列出文件夹"main"等(没有嵌套):
main
pymysql
那么你可以修改第三个参数,而不是回到那么远:
os.path.relpath(os.path.join(dirpath, filename), os.path.join(folders[0], '..')))
注意:我删除了/..