【发布时间】:2020-10-17 02:28:48
【问题描述】:
我的梦想:)
我想将pyaudio 用于将在 AWS Lambda 上运行的函数。但是,运行sam build --use-container 时出现PythonPipBuilder:ResolveDependencies 错误
我的设置
我已经设法将我的项目构建到此。
requirements.txt
pyaudio
app.py
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': 'Hello World'
}
template.yaml(至少相关部分)
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
我的问题
在运行sam build --use-container --debug 时,我看到了这个输出:
Traceback(最近一次调用最后一次): 文件“/var/lang/lib/python3.6/site-packages/aws_lambda_builders/workflows/python_pip/actions.py”,第 42 行,在执行 requirements_path=self.manifest_path, 文件“/var/lang/lib/python3.6/site-packages/aws_lambda_builders/workflows/python_pip/packager.py”,第 137 行,在 build_dependencies self._dependency_builder.build_site_packages(requirements_path, artifacts_dir_path, scratch_dir_path) 文件“/var/lang/lib/python3.6/site-packages/aws_lambda_builders/workflows/python_pip/packager.py”,第 201 行,在 build_site_packages 引发 MissingDependencyError(packages_without_wheels) aws_lambda_builders.workflows.python_pip.packager.MissingDependencyError: {pyaudio==0.2.11(sdist)}
...
在容器内构建返回响应 {"jsonrpc": "2.0", "id": 1, "error": {"code": 400, "message": "PythonPipBuilder:ResolveDependencies - {pyaudio==0.2.11 (sdist)}"}}
我的理论
我的理论是这会失败,因为在运行sam build --use-container时使用的 Docker 容器镜像中没有安装 PortAudio
如果我在我安装 PortAudio 的本地计算机上运行pip install -r requirements.txt,一切都会按预期运行。
我怀疑我需要以某种方式在 AWS Lambda 环境中安装 PortAudio……但是如何?层?如果是这样,我从哪里获得我需要的二进制文件?
TL;DR;
如何在 AWS Lambda 环境中安装 PortAudio?
【问题讨论】:
-
我正在尝试做同样的事情——为 PortAudio 创建一个 Lambda 层。我从您的评论中看到您终于能够做到,但我正在努力重现您的解决方案。我正在尝试使用 lambci/lambda docker 映像而不是 EC2 实例来做到这一点,但我认为它应该翻译。我克隆了 portaudio 存储库并使用 make 构建它,但现在我不确定我需要哪些构建输出文件,而且我不确定将文件放在我的层 zip 的位置。 libportaudio.so.2.0.0 重命名为 libportaudio.so?复制到 /lib 层 zip 中?
-
嘿@jamshehan,你有我的同情 :) 我创建了一个 GitHub 存储库,其中包含依赖项和模糊的描述。希望有用:github.com/pbodsk/aws-lambda-libso-dependencies
标签: python aws-lambda portaudio