我在使用上传的 Python 脚本的 .zip
文件运行 lambda 函数时遇到问题,该文件总是生成 “无法导入模块 '...':没有名为 ... 的模块"
(我已确保我的 lambda 处理程序与我的 Python 文件名匹配),并且通过在线研究,我发现在这种情况下文件的压缩方式非常严格。
解决方案提供了以下命令示例
错误的命令:
$ ls
lambda_sample
$ zip -r lambda_sample lambda_sample
正确的命令:
$ cd lambda_sample
$ zip -r ../lambda_sample .
事实上,第二条命令对我有用。
所以我想知道为什么第一个命令不起作用?此外,我使用的是 macOS,通过右键单击文件夹和 Compress [folder_name]
会生成 Lambda 无法读取的 [folder_name].zip
文件,因此生成相同的文件我一开始提到的错误。谁能提供任何见解?
最佳答案
AWS Lambda 期望您的处理程序位于 zip 文件的基础/根目录中,并且您显示的 zip
命令会生成不同的文件布局。
我将用我自己系统中的一些示例进行演示。
这是您的第一个命令的示例:
> ls
package
> zip -r package package
adding: package/ (stored 0%)
adding: package/lambda.py (deflated 38%)
adding: package/process/ (stored 0%)
adding: package/process/__init__.py (stored 0%)
adding: package/process/aws.py (deflated 56%)
# ... etc.
如果我unzip package.zip
,生成的解压文件的文件夹结构如下所示:
package/lambda.py
package/process/
package/process/__init__.py
# and so on
现在,你的第二个命令的例子,我首先 cd package
:
> zip -r ../package .
adding: lambda.py (deflated 38%)
adding: process/ (stored 0%)
# ... etc.
因此,如果我unzip package.zip
生成的解压缩文件如下所示:
lambda.py
process/
process/__init__.py
# etc.
因此在第二种情况下,您在展开 ZIP 后没有父目录,AWS Lambda 将正常工作。
关于python - AWS Lambda 压缩文件命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46553081/