AWS Lambda:无法从“PIL”导入名称“\u imaging”

2024-09-28 03:24:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试运行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。但这并没有解决我的问题

这是我的拉链里的东西。你有什么想法吗,为什么我还是会犯这个错误

enter image description here


Tags: tolambdaimportpils3example错误with
3条回答

使用Python3.6而不是3.7只会给我一个不同的错误。由于AWS lambda的构建方式,它似乎缺少了一些组件

对我有效的5分钟解决方案:

保存所有,它应该只是工作!但是,您必须确保重新部署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。然后只需运行以下命令:

docker build -t fbprophet . && \
docker run --rm -v $PWD:/export \
fbprophet cp upload-to-s3.zip /export

这将(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映像

相关问题 更多 >

    热门问题