cod*_*sea 0 python lambda zip amazon-web-services
我遇到了运行lambda函数的问题,上传.zip的Python脚本文件总是产生"Unable to import module '...': No module named ..."(我确保我的lambda处理程序与我的Python文件名相匹配),通过在线研究,我发现文件压缩的方式非常严格在这种情况下.
该解决方案提供以下命令示例
错误的命令:
$ ls
lambda_sample
$ zip -r lambda_sample lambda_sample
Run Code Online (Sandbox Code Playgroud)
正确的命令:
$ cd lambda_sample
$ zip -r ../lambda_sample .
Run Code Online (Sandbox Code Playgroud)
事实上,第二个命令对我有用.
所以我想知道为什么第一个命令不起作用?此外,我正在使用macOS,并通过右键单击文件夹并Compress [folder_name]生成一个[folder_name].zipLambda无法读取的文件,因此产生我在开头提到的相同错误.谁能提供任何见解?
AWS Lambda期望您的处理程序位于zip文件的base/root中,并且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.
Run Code Online (Sandbox Code Playgroud)
如果我unzip package.zip,生成的解压缩文件的文件夹结构如下所示:
package/lambda.py
package/process/
package/process/__init__.py
# and so on
Run Code Online (Sandbox Code Playgroud)
现在,我的第二个命令的例子,我在cd package第一个:
> zip -r ../package .
adding: lambda.py (deflated 38%)
adding: process/ (stored 0%)
# ... etc.
Run Code Online (Sandbox Code Playgroud)
因此,如果我unzip package.zip看起来像这样生成的解压缩文件:
lambda.py
process/
process/__init__.py
# etc.
Run Code Online (Sandbox Code Playgroud)
因此,在第二种情况下,在展开ZIP后您没有父目录,并且AWS Lambda将正常工作.
| 归档时间: |
|
| 查看次数: |
3160 次 |
| 最近记录: |