升级Python Lambda至支持版本遇orjson模块导入错误求助
针对你升级Lambda Python版本后出现的No module named 'orjson.orjson'错误,以下是创建Lambda层时容易忽略的几个关键点:
架构不匹配:orjson是编译型原生库,必须与Lambda运行时的CPU架构(x86_64/arm64)完全一致。如果本地环境架构和Lambda架构不同(比如本地是x86,Lambda用arm64),直接安装的orjson二进制文件无法在Lambda上运行,就会出现模块找不到的错误。
解决办法:用对应架构的环境安装依赖,比如用Docker模拟Lambda的官方环境:# 以Python 3.9 + x86_64为例 docker pull public.ecr.aws/lambda/python:3.9 docker run -v $(pwd):/tmp --rm public.ecr.aws/lambda/python:3.9 pip install orjson -t /tmp/python/lib/python3.9/site-packages/ cd /tmp && zip -r orjson-layer.zip python/层的zip结构错误:Lambda层的Python依赖必须遵循固定目录结构:
python/lib/pythonX.X/site-packages/(X.X为目标Python版本,比如3.10对应python3.10)。打包时要把整个python目录作为zip的根目录,而不是直接将site-packages下的文件打包。
错误结构示例:zip根目录直接是orjson/
正确结构示例:zip根目录是python/,内部包含lib/python3.9/site-packages/orjson/Python版本不兼容:安装依赖时使用的Python版本必须和Lambda运行时的版本一致。比如你用Python 3.6安装的orjson,放到Python 3.9的Lambda环境中,会因为版本差异导致原生模块无法加载,表现为找不到
orjson.orjson。必须确保安装依赖的Python版本与Lambda目标版本完全匹配。间接依赖版本问题:你的直接依赖可能引入了不兼容目标Python版本的orjson旧版本。比如部分早期orjson版本不支持Python 3.10及以上,需要手动指定兼容的orjson版本安装:
pip install orjson>=3.8.0 -t <目标目录> # 3.8.0及以上版本支持Python 3.7-3.11
内容的提问来源于stack exchange,提问作者TonyM

