我目前正在尝试运行AWS Lambda入门教程:https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html#with-s3-example-deployment-pkg-python
但是,我总是收到一个错误:
{
"errorMessage": "Unable to import module 'CreateThumbnail': cannot import name '_imaging' from 'PIL' (/var/task/PIL/__init__.py)",
"errorType": "Runtime.ImportModuleError"
}
日志输出
START RequestId: fefba1d1-443c-4617-a5ad-c3aac19e5591 Version: $LATEST
[ERROR] Runtime.ImportModuleError: Unable to import module 'CreateThumbnail': cannot import name '_imaging' from 'PIL' (/var/task/PIL/__init__.py)
END RequestId: fefba1d1-443c-4617-a5ad-c3aac19e5591
REPORT RequestId: fefba1d1-443c-4617-a5ad-c3aac19e5591 Duration: 1.52 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 71 MB
我从lambci/docker-lambda
映像构建了我的.zip。但这并没有解决我的问题
这是我的拉链里的东西。你有什么想法吗,为什么我还是会犯这个错误
使用Python3.6而不是3.7只会给我一个不同的错误。由于AWS lambda的构建方式,它似乎缺少了一些组件
对我有效的5分钟解决方案:
转到https://github.com/keithrozario/Klayers/tree/master/deployments/python3.8/arns(注意这是python 3.8)
为lambda运行到的区域选择文件
获取最新枕头版本的ARN
在AWS控制台中的Lambda上,单击“层(0)”
添加新图层:
保存所有,它应该只是工作!但是,您必须确保重新部署lambda以某种方式保持该层
这篇拯救生命的博客文章https://medium.com/@derekurizar/aws-lambda-python-pil-cannot-import-name-imaging-11b2377d31c4的全部学分
为了回答@hax comment,我在这里提出了以下解决方案: https://github.com/marcmetz/Create-AWS-Lambda-Function-with-Docker
我面临的问题是Mac上的Python安装与AWS上的不同。为了使用我的解决方案,请在存储库中安装Docker,
cd
,并将包添加到requirements.txt
。然后只需运行以下命令:这将(1)基于this创建一个Docker容器,(2)安装requirements.txt中定义的所有包和依赖项,然后(3)在repository文件夹中返回一个.zip文件。该.zip文件可用于Lambda函数
确保也将
lambda_function.py
调整为您想要的任何函数尽管尝试了所有这些步骤,我仍然面临着错误。最后我找到了我的问题:)
对我来说,AWS Lamda运行时中的Python版本是Python 3.7.7。我使用python 3.6安装了Pillow。PIL与不同版本的python的兼容性似乎存在一些问题
因此,要解决这个问题,要么将AWS lambda运行时更改为python3.6(这就是我尝试并完成的工作)
或者,您也可以尝试安装Python3.7.7的pillow并将其复制到lambda
由于cython存在一些问题,因此首选的方法是使用AmazonLinux在EC2中安装软件包或使用AWSAMIDocker映像
相关问题 更多 >
编程相关推荐