Python 使用pyaudio的AWS Lambda函数 我的梦想:)
我想将Python 使用pyaudio的AWS Lambda函数 我的梦想:),python,aws-lambda,portaudio,Python,Aws Lambda,Portaudio,我想将pyaudio用于将在AWS Lambda上运行的函数。但是,在运行sambuild时,我得到一个PythonPipBuilder:ResolveDependencies错误——使用容器 我的设置 我已经设法把我的项目发展到现在 requirements.txt pyaudio app.py template.yaml(至少相关件) 我的问题 运行sambuild--use container--debug时,我看到以下输出: 回溯(最近一次呼叫最后一次): 文件“/var/lang/li
pyaudio
用于将在AWS Lambda上运行的函数。但是,在运行sambuild时,我得到一个PythonPipBuilder:ResolveDependencies
错误——使用容器
我的设置
我已经设法把我的项目发展到现在
requirements.txt
pyaudio
app.py
template.yaml(至少相关件)
我的问题
运行sambuild--use container--debug
时,我看到以下输出:
回溯(最近一次呼叫最后一次):
文件“/var/lang/lib/python3.6/site packages/aws\u lambda\u builders/workflows/python\u pip/actions.py”,执行中第42行
需求路径=self.manifest路径,
文件“/var/lang/lib/python3.6/site packages/aws\u lambda\u builders/workflows/python\u pip/packager.py”,第137行,内部版本依赖项
self.\u dependency\u builder.build\u site\u包(需求路径、工件路径、临时路径)
文件“/var/lang/lib/python3.6/site packages/aws\u lambda\u builders/workflows/python\u pip/packager.py”,第201行,in build\u site\u packages
raise MissingDependencyError(包不带轮子)
aws_lambda_builders.workflows.python_pip.packager.missingdependencycerror:{pyaudio==0.2.11(sdist)}
容器内部生成返回的响应{“jsonrpc”:“2.0”,“id”:1,“error”:{“code”:400,“message”:“PythonPipBuilder:ResolveDependencies-{pyaudio==0.2.11(sdist)}”
我的理论
我的理论是,这会失败,因为在运行sambuild--use container
如果我在安装了PortAudio的本地机器上运行pip install-r requirements.txt
,一切都会正常工作
我怀疑我需要以某种方式在AWS Lambda环境中安装PortAudio……但是如何安装呢?层?如果是的话,我从哪里得到我需要的二进制文件
TL;博士
如何在AWS Lambda环境中安装PortAudio?测试Lambda的快速方法是在包含Lambda代码的文件夹中安装软件包(例如pyaudio),然后将其全部压缩并上载。查看更多信息
如果您在安装软件包时遇到任何问题,那么可能是依赖性问题,您可能需要添加一层
一旦lambda正常工作,就可以删除它并使用buildspec.yml安装python包。AWS将在运行代码pipleine时安装这些包。更多详情谢谢您的回答@greg。如果我按照文档中的建议运行pip install--target./package PyAudio
,那么它在我的本地机器上就可以正常工作,这台机器是Mac。但据我所知——我可能错了——如果我上传,它将失败,因为我试图使用Mac上的.so文件……在Linux机器上无法工作。这给了我一个想法,所以我将我的设置复制到一个EC2实例,并尝试运行pip install--target./package PyAudio
,但由于../src/_portaudiomodule.o无法执行“gcc”:没有这样的文件或目录,因此,没有portaudiomodule:(如果我运行yum-search-portaudio
I-get:警告:找不到与之匹配的:portaudio
,这表明由于某些原因,portaudio在AWS Linux安装上无法开箱即用。我想您已经回答了,但大多数软件包都可以使用PIP安装。但是,PyAudio必须使用控制盘安装(以及正确的操作系统/版本)。请参阅。目前,我仍然建议将lambda作为zip上传(作为一项基本测试)。请参阅:的答案,这会让您了解如何安装itUpdate。我终于能够将Portaudio安装到EC2实例(使用此:)从那里我可以安装Portaudio,然后将已安装的so文件添加到一个层中,我可以将其添加到我的功能中,并最终使其工作。伙计,感觉很好。我会接受你的回答,因为你在评论中为我指出了正确的方向。感谢你的时间和帮助,非常感谢:)我正在尝试做完全相同的事情-为PortAudio创建一个Lambda层。我从您的评论中看到,您最终能够做到这一点,但我正在努力复制您的解决方案。我正在尝试使用lambci/Lambda docker映像,而不是EC2实例来实现这一点,但我认为它应该转换。我克隆了PortAudio repo并构建了使用make,但现在我不确定我需要哪些构建输出文件,也不确定我的图层zip.libportaudio.so.2.0.0重命名为libportaudio.so的文件放在哪里?复制到图层zip中的/lib?嘿@jamsehan,我很同情你:)我创建了一个GitHub repo,其中包含依赖项和模糊描述。希望它有用:
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': 'Hello World'
}
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: my_app/
Handler: app.lambda_handler
Runtime: python3.6
Events:
MyEvent:
Type: Api
Properties:
Path: /test
Method: get