获取PIL /枕头4.2.1正确上传到AWS Lambda Py3.6

问题描述 投票:14回答:3

背景

过去几天,我一直在努力部署使用Pillow的Lambda,而我正在使用Python 3.6进行部署。同样值得注意的是,我正在Windows 10环境中进行开发。

首次尝试

首先,通过执行以下操作让pip将软件包严格安装在我的工作区中:

pip3 install pillow -t "D:\Work and Projects\...\...\<projectdir>\pillow"

我有其他软件包,并尝试在同一庄园中安装这些软件包,其中一个特别是praw,而我这样做的方式是:

pip3 install praw -t "D:\Work and Projects\...\...\<projectdir>\praw"

将项目内容压缩在一起后,我将程序包上传到Lambda,并且在我的第一次测试中收到错误:

无法导入模块'motw_lambda':无法导入名称'_imaging'

然后,我删除了Pillow软件包,以查看此问题的根源(Pillow或praw或其他软件包之一)。删除枕头后,执行成功。然后,我删除了我包中的pillow包并尝试:

pip3 install pillow -t "D:\Work and Projects\...\...\<projectdir>\PIL"

pip3 install pillow -t "D:\Work and Projects\...\...\<projectdir>\Pillow"

但是软件包'_imaging'出现了相同的错误。

进一步尝试

然后我按照this resourcethis的指示进行操作。我也尝试使用virualenv甚至lambda-uploader

很奇怪,我遇到相同的错误!我在这里已经没有选择,并且感到我正在做一些愚蠢的事情,或者当前在Lambda-Python3.6上无法做到这一点(尽管我可以做到) t图像中的其他人还没有在py3.6-lambda中使用枕头了...)

任何信息,帮助或一般资源将不胜感激!

python aws-lambda python-imaging-library pillow
3个回答
19
投票

基本上,您必须使用Docker甚至是更好的EC2实例来编译库(例如PIL)。>

  1. 启动这样的Docker容器:docker run --rm -it -v "%cd%:/code" lambci/lambda:build-python3.6 sh

  2. 在里面,导航至/ code目录(cd /code),创建一个virtualenv(virtualenv env),将其激活(source env/bin/activate),最后,安装您的库(pip install pillow)。

  3. ] >
  4. 一旦安装了库,就可以退出容器。这里的秘密是将包库移动到根文件夹(主.py文件所在的位置)。例如,将文件夹env/lib/python3.6/site-packages/PIL移至根目录。

  5. 然后,将您的PIL文件夹与.py文件一起压缩,就可以设置了!

    我刚做了,并在这里完整记录了下来:https://learn-serverless.org/post/deploying-pillow-aws-lambda/

您可以在此处使用PIL的预编译版本:https://github.com/Miserlou/lambda-packages

只需将PIL文件夹解压缩到部署程序包中,它就可以正常工作。

对于同样不熟悉aws python并遇到此问题的其他人,您可以使用layers功能,并且这里可以链接到现有的图层,这对我有用。

https://github.com/keithrozario/Klayers

特别是对us-east-1的枕头:

[arn:aws:lambda:us-east-1:770693421928:layer:Klayers-python38-Pillow:2


4
投票

您可以在此处使用PIL的预编译版本:https://github.com/Miserlou/lambda-packages


0
投票

对于同样不熟悉aws python并遇到此问题的其他人,您可以使用layers功能,并且这里可以链接到现有的图层,这对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.