背景
过去几天我一直在努力部署一个使用 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,在我的第一次测试中我收到了错误:
Unable to import module 'motw_lambda': cannot import name '_imaging'
然后我删除了 Pillow 包,试图查看此问题的根源(Pillow 或 praw 或其他包之一)。移除 Pillow 后,执行成功。然后我删除了包中的 pillow 包并尝试:
pip3 install pillow -t "D:\Work and Projects\...\...\<projectdir>\PIL"
和
pip3 install pillow -t "D:\Work and Projects\...\...\<projectdir>\Pillow"
但是包 '_imaging' 出现了同样的错误。
进一步尝试
然后我按照 this resource 的指示进行操作和 this .我也尝试使用 virualenv甚至 lambda-uploader .
很奇怪,我得到了同样的错误!我在这里没有选择,感觉要么我在做一些愚蠢的事情,要么这在目前的 Lambda-Python3.6 上是不可能的(虽然我无法想象其他人还没有在 py3.6-lambda 中使用 Pillow ......)
如有任何信息、帮助或通用资源,我们将不胜感激!
最佳答案
基本上,您必须使用 Docker 或更好的 EC2 实例来编译库(例如,PIL)。
像这样启动一个 Docker 容器:docker run --rm -it -v "%cd%:/code"lambci/lambda:build-python3.6 sh
在那里,导航到/code 目录 (cd/code),创建一个 virtualenv (virtualenv env),激活它 (source env/bin/activate) 最后,安装你的库 (pip install pillow)。
安装库后,您可以退出容器。这里的秘诀是将您的包库移动到根文件夹(您的主要 .py 文件所在的位置)。例如,将文件夹 env/lib/python3.6/site-packages/PIL 移动到根目录。
然后,将您的 PIL 文件夹与您的 .py 文件一起压缩!
完整示例:
以下示例编译和压缩 PIL 和其他常见 Python 库以在 AWS Lambda 中运行。
Docker 文件:
FROM lambci/lambda:build-python3.6
WORKDIR /code
CMD ["sh", "entrypoint.sh"]
入口点.sh:
#!/bin/sh
set -ex
cd /code/
if [ ! -d "PIL" ]; then
# Create virtual env, activate it and install PIL
virtualenv env && source env/bin/activate && pip install pillow requests
# Copy necessary files to the root folder
rm -f build-output.zip
#mkdir PIL
cp -f -r env/lib/python3.6/site-packages/PIL .
cp -f -r env/lib/python3.6/site-packages/requests .
# below are the dependencies for the requests pkg
cp -f -r env/lib/python3.6/site-packages/urllib3 .
cp -f -r env/lib/python3.6/site-packages/certifi .
cp -f -r env/lib/python3.6/site-packages/chardet .
cp -f -r env/lib/python3.6/site-packages/idna .
# Remove temp files
rm -r env
fi
# ZIP it
zip -9 build-output *.py
zip -9 -r build-output PIL
zip -9 -r build-output requests
zip -9 -r build-output urllib3
zip -9 -r build-output certifi
zip -9 -r build-output chardet
zip -9 -r build-output idna
构建(Windows):
docker build -t build_lambda .
docker run --rm -v "%cd%:/code" build_lambda
关于python - 让 PIL/Pillow 4.2.1 正确上传到 AWS Lambda Py3.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45473501/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的