首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS lambda无法导入模块'lambda_function':没有名为PIL的模块

AWS lambda无法导入模块'lambda_function':没有名为PIL的模块
EN

Stack Overflow用户
提问于 2018-06-07 14:35:09
回答 4查看 9.9K关注 0票数 4

我使用的是SearchFacesbyimage的lambda函数,我使用的是这个文档https://aws.amazon.com/blogs/machine-learning/build-your-own-face-recognition-service-using-amazon-rekognition/

为了进行比较,我在哪里使用了这个

代码语言:javascript
复制
from PIL import Image

我得到了这个错误Unable to import module 'lambda_function': No module named PIL

EN

回答 4

Stack Overflow用户

发布于 2018-06-07 17:16:49

您会收到此错误,因为PIL for Python 2.x或PILLOW for 3.x不是python lambda环境中可用的标准库。

要使用这样的库,您必须为所需的所有库以及要部署的python代码创建一个自定义部署包。可以在docker中或使用EC2实例轻松制作此包。

以下是如何在EC2上创建部署包的过程:

假设您有一个名为CreateThumbnail.py

  • If的文件,您的源代码位于本地主机上,请将其复制到

通过将scp -i key.pem /path/ to /my_code.py ec2-user@public-ip-address:~/CreateThumbnail.py

  • Connect连接到64位Amazon Linux实例。

使用以下步骤ssh -i key.pem PythonPython3.6和virtualenv:

a) sudo yum安装-y gcc zlib zlib-devel openssl openssl-devel

b) wget

c) tar -xzvf Python-3.6.1.tgz

d)配置cd Python-3.6.1 && ./ && make

e)本地sudo命令installfsudo /usr//bin/ pip3安装通过pip3安装的虚拟环境

/usr/local/bin/virtualenv ~/_venv

虚拟环境中的源~/shrink_venv/bin/activate

  • Install库

pip安装枕头

boto3

  • Add pip将库和lib64站点包的内容安装到您的.zip文件中。请注意,以下步骤假定您使用的是Python运行时版本3.6。如果您使用的是2.7版,则需要进行相应的更新。

cd $VIRTUAL_ENV/lib/python3.6/site-packages

压缩包-r9 ~/CreateThumbnail.zip

注意-要包括所有隐藏文件,请使用以下选项:

将python代码压缩为~/CreateThumbnail.zip

  • Add -r9 .zip文件

cd ~

CreateThumbnail.py -g CreateThumbnail.zip zip

现在CreateThumbnail.zip是您的自定义部署包,只需将其复制到s3并将其上传到您的lambda即可。

此示例摘自上的亚马逊网络服务官方文档

票数 1
EN

Stack Overflow用户

发布于 2019-04-03 23:20:50

尽管文档清楚地概述了为lambda函数手动创建zip工件所使用的步骤。这种解决方案的可扩展性不是很好。我一直在使用一个名为juniper的非常小的包来无缝打包python lambda函数。

在您的特定情况下,这是您需要采取的步骤:

假设这是您的文件夹结构:

代码语言:javascript
复制
.
├── manifest.yml
├── src
│   ├── requirements.txt
│   ├── lambda_function.py

在requirements.txt中,您只需要包含lambda函数的依赖项,在本例中就是PIL库。

代码语言:javascript
复制
Pillow==6.0.0

现在,您只需创建一个小文件来告诉juniper在zip文件中包含什么内容。manifest.yml将如下所示:

代码语言:javascript
复制
functions:
  reko:
    requirements: ./src/requirements.txt.
    include:
    - ./src/lambda_function.py

现在,您需要在本地环境中使用pip install juniper。执行cli命令:

juni build

Juniper将创建:./dist/reko.zip。该文件将包含您的源代码以及包含在requirements.txt文件中的任何依赖项。

默认情况下,juniper使用docker容器,而build命令将使用python3.6。您可以覆盖该默认设置。

票数 1
EN

Stack Overflow用户

发布于 2019-12-01 21:36:30

我也遇到了同样的问题。您可以在这里采取两个步骤:手动与自动打包和部署。

手动步骤包括在该虚拟环境中创建正确的virtualenv和安装依赖项。然后压缩所有内容并上传到AWS。

为了实现自动化,我总是喜欢使用Serverless框架来打包和部署Lambda函数。具体地说,python-requirements-plugin有助于打包。但我必须指定以下内容来告诉框架在docker容器中构建,并且不剥离任何库:

代码语言:javascript
复制
custom:
  pythonRequirements:
    dockerizePip: true
    strip: false
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50734416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档