Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pyaudio的AWS Lambda函数 我的梦想:)_Python_Aws Lambda_Portaudio - Fatal编程技术网

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