Python3.9 AWS Lambda因pyjwt[crypto]依赖GLIBC缺失报错求助
问题:AWS Lambda Python 3.9 部署时 GLIBC 版本不兼容错误
运行Python 3.9版本的AWS Lambda时出现以下错误:
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /var/task/cryptography/hazmat/bindings/_rust.abi3.so) Traceback (most recent call last):
已执行的部署步骤:
- 创建Dockerfile,基于Ubuntu镜像安装Python3.9、依赖库,通过pip将
pyjwt[crypto]==2.6.0、pymongo[srv]==4.3.3安装到指定目录并打包 - 将容器内的package.zip复制到MacOS主机,添加lambda_function.py后通过boto3上传
尝试添加指定平台的cryptography安装命令时,出现错误:
> [12/14] RUN pip install --platform --platform manylinux2014_x86_64 --implementation cp --python 3.9 --only-binary=:all: --upgrade --target /home/packages cryptography: #19 3.185 ERROR: Could not find a version that satisfies the requirement manylinux2014_x86_64 (from versions: none) #19 3.186 ERROR: No matching distribution found for manylinux2014_x86_64
需求:保留zip上传方式,需明确问题原因及解决办法。
问题原因
- GLIBC版本不匹配:AWS Lambda的Python 3.9运行环境基于Amazon Linux 2,系统自带的GLIBC版本为2.26。而使用Ubuntu镜像编译的
cryptography依赖GLIBC 2.28,导致Lambda运行时无法找到对应版本的系统库,触发导入错误。 - pip命令语法错误:重复使用
--platform参数,导致pip将manylinux2014_x86_64误认为是需要安装的包名,因此报错找不到匹配版本。
解决办法(均支持zip上传方式)
方案1:使用Lambda兼容的镜像编译依赖(推荐)
改用与Lambda运行环境一致的镜像编译依赖,确保系统库版本匹配:
- 使用官方Lambda Python 3.9镜像作为Docker基础镜像,示例Dockerfile:
FROM public.ecr.aws/lambda/python:3.9 WORKDIR /home/packages # 将依赖安装到指定目录 RUN pip install pyjwt[crypto]==2.6.0 pymongo[srv]==4.3.3 --target /home/packages # 打包依赖目录 RUN zip -r package.zip /home/packages
- 构建容器并将package.zip复制到本地:
docker build -t lambda-deps . docker run --rm -v $(pwd):/host lambda-deps cp /home/packages/package.zip /host/
- 将lambda_function.py添加到package.zip根目录,重新打包后通过boto3上传即可。
方案2:修正pip命令,安装兼容的预编译包
修正pip平台参数的语法错误,强制下载适配manylinux2014的预编译包(这类包兼容GLIBC 2.17+,符合Amazon Linux 2要求):
pip install --platform manylinux2014_x86_64 --implementation cp --python-version 3.9 --only-binary=:all: --upgrade --target /home/packages pyjwt[crypto]==2.6.0 pymongo[srv]==4.3.3 cryptography
执行该命令后,将生成的依赖目录打包,添加lambda_function.py后上传。
方案3:降级cryptography到兼容版本
查找并安装不需要GLIBC 2.28的cryptography旧版本(如38.0.4及以下,需自行验证兼容性):
pip install pyjwt[crypto]==2.6.0 pymongo[srv]==4.3.3 cryptography==38.0.4 --target /home/packages
⚠️ 注意:降级可能引入安全漏洞,仅作为临时解决方案,长期建议使用方案1或2。
内容的提问来源于stack exchange,提问作者Tom3652
相关产品推荐
相关产品推荐

