在AWS Lambda中使用pyzstd模块时遇导入错误求助
解决AWS Lambda中pyzstd模块导入失败的问题
问题原因
你在M1 Mac(ARM架构)本地安装的pyzstd是针对ARM架构编译的,而AWS Lambda默认使用x86_64架构运行环境,架构不匹配导致C/CFFI实现无法加载;另外pyzstd依赖的zstd动态库在Lambda环境中可能缺失或版本不兼容。
解决方案
用Lambda兼容架构构建依赖包
最稳妥的方式是在x86_64环境或模拟Lambda运行环境的Docker容器中安装依赖:- 拉取对应Python版本的Lambda官方镜像,例如:
docker run -v "$PWD":/var/task public.ecr.aws/lambda/python:3.11 bash - 在容器内将pyzstd安装到本地挂载的目录:
pip install pyzstd -t ./python/lib/python3.11/site-packages/ - 退出容器后,将
python目录与处理代码一起打包上传到Lambda。
- 拉取对应Python版本的Lambda官方镜像,例如:
安装静态链接版本的pyzstd
安装时强制静态链接zstd库,避免依赖系统动态库:pip install pyzstd --install-option="--static-link-zstd"(建议在Docker的Lambda环境中执行此命令,确保编译结果适配Lambda)
切换Lambda运行架构为ARM64
在Lambda控制台创建或修改函数时,选择**ARM64(Graviton2)**架构,与M1 Mac的ARM架构匹配,本地打包的依赖包即可直接使用。注意确认所选Python运行时支持ARM架构(Python 3.8及以上版本均支持)。
内容的提问来源于stack exchange,提问作者datahack
相关产品推荐
相关产品推荐

