gpt4 book ai didi

python - Lambda- uploader : Unable to import module 'CreateThumbnail' : cannot import name _imaging

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:56 28 4
gpt4 key购买 nike

我正在使用 Lambda-uploader编写 python lambda 代码并将 zip 移动到 AWS。我创建了一个包含我的 jar 文件和 zip 文件夹结构,如下所示。

enter image description here

我使用的代码来自 AWS 门户并且使用的是 PIL 类。我根据要求将 Pillow 库包含在 Lambda-uploader 中,但是当我通过导入创建的 zip 文件在 Lambda 控制台上创建我的 Lambda 函数时,我收到以下错误消息。任何帮助表示赞赏。

错误:

START RequestId: e4893543-93aa-11e7-b4b9-89453f1042aa Version: $LATEST
Unable to import module 'CreateThumbnail': cannot import name _imaging

END RequestId: e4893543-93aa-11e7-b4b9-89453f1042aa
REPORT RequestId: e4893543-93aa-11e7-b4b9-89453f1042aa Duration: 0.44 ms Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 33 MB

lambda.josn

{
"name": "CreateThumbnail",
"description": "It does things",
"region": "us-east-1",
"runtime": "python2.7",
"handler": "CreateThumbnail.lambda_handler",
"role": "arn:aws:iam::0000000000:role/LambdaTest",
"requirements": ["Pillow"],
"ignore": [
"circle\\.yml$",
"\\.git$",
"/.*\\.pyc$"
],
"timeout": 30,
"memory": 512
}

python 代码:

from __future__ import print_function
import boto3
import os
import sys
import uuid
from PIL import Image
import PIL.Image

s3_client = boto3.client('s3')

def resize_image(image_path, resized_path):
with Image.open(image_path) as image:
image.thumbnail(tuple(x / 2 for x in image.size))
image.save(resized_path)

def handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
upload_path = '/tmp/resized-{}'.format(key)

s3_client.download_file(bucket, key, download_path)
resize_image(download_path, upload_path)
s3_client.upload_file(upload_path, '{}resized'.format(bucket), key)

最佳答案

我遇到了完全相同的问题,我已经解决了。最后的 tl;dr 版本。
_imaging 是一个动态链接的共享对象库(带有 .so 扩展名)。这大致相当于 Windows DLL 模块的 Linux。您可以在 PIL 文件夹中查看此模块。
问题是这些 .so 文件是针对本地计算机体系结构的编译文件。因此,如果您在 Windows 上执行 pip install Pillow,动态链接库将无法在任何其他操作系统或架构上使用。
AWS lambda 使用 Amazon Linux 执行环境。不是 Ubuntu,是亚马逊 Linux。因此,如果您想在 lambda 上使用动态链接的共享对象库,最好的办法是将所有库安装在类似的环境中。值得庆幸的是,EC2 提供了与 lambda 完全相同的执行环境。所以,我分拆了一个临时的 EC2 实例。通过 SSH/Putty 远程登录并安装所有依赖项。然后我将它与我自己的代码一起压缩并发布到 lambda。我的程序现在运行良好!

长话短说

  • 使用 Amazon Linux 执行环境分拆 EC2 实例。
  • 通过 SSH/Putty 远程登录来安装 Pillow 等依赖项。
  • 将您自己的代码与库一起压缩并在 Lambda 上发布。

过程进行到一半时,我遇到了一个 nice blog Matthew Perry 解释了整个过程。

关于python - Lambda- uploader : Unable to import module 'CreateThumbnail' : cannot import name _imaging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46093874/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com