python - AWS Lambda 压缩文件命令

我在使用上传的 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 将正常工作。

https://stackoverflow.com/questions/46553081/

相关文章:

php - 使用 Laravel 5.2 集合中的列名获取唯一值的计数

wpf - 字符串格式正值和负值以及条件颜色格式 XAML

c# - 蓝牙扫描C#

amazon-web-services - 如何在不使用 AutoScaling 的情况下使用 aw

julia - 为什么 Julia 闭包不复制数组?

r - 在 R 中制作特定的分位数图

node.js - 在 Node.js 中生成唯一 ID 的最佳方法是什么?

php - 删除 wordpress 站点中超过 2 年的帖子

sql - Oracle SQL - 从给定的字符串形成一个虚拟表以与另一个表连接

Python 2.7 - 如何检查是否按下了 SHIFT-Key 或 CTRL+Key?