求助:在AWS Lambda中导入Langchain库失败的解决方法
解决AWS Lambda + Langchain导入错误:No module named 'pydantic_core._pydantic_core'
问题场景
使用Runtime: Python 3.11, Architecture: arm64的AWS Lambda构建聊天机器人,通过自定义层安装Langchain后,触发函数时CloudWatch日志报错:
[ERROR] Runtime.ImportModuleError: Unable to import module ‘ChatbotPO-master.trigger.trigger’: No module named ‘pydantic_core._pydantic_core’
解决方案
1. 确保层的构建环境与Lambda架构完全匹配
pydantic_core是二进制扩展包,依赖运行架构。如果在x86架构的本地机器直接pip安装,会下载x86版本的包,放到arm64的Lambda环境中无法识别,导致模块找不到。
推荐用Docker模拟Lambda的arm64环境构建层:
# 拉取AWS官方的arm64 Python3.11 Lambda镜像 docker pull public.ecr.aws/lambda/python:3.11-arm64 # 启动容器并挂载当前目录到容器内的/var/task路径 docker run -v "$(pwd)":/var/task public.ecr.aws/lambda/python:3.11-arm64 bash # 在容器内部执行依赖安装 mkdir -p aws-layer/python/lib/python3.11/site-packages pip install langchain --target aws-layer/python/lib/python3.11/site-packages --no-cache-dir # 退出容器后打包层 exit cd aws-layer zip -r9 lambda-layer.zip .
2. 指定兼容的pydantic版本(可选)
部分新版pydantic的pydantic_core可能存在架构适配问题,可指定稳定兼容版本安装:
在容器内执行:
pip install langchain pydantic==2.5.2 pydantic_core==2.14.5 --target aws-layer/python/lib/python3.11/site-packages --no-cache-dir
3. 验证层的内容结构
打包完成后,解压lambda-layer.zip检查python/lib/python3.11/site-packages目录下是否存在pydantic_core文件夹,且内部包含arm64架构的二进制文件(如.so后缀文件)。若缺失,说明安装过程未正确获取对应架构的依赖包,需重新构建。
4. 替换层配置
将重新构建的层上传到AWS Lambda,并确保函数已关联该层,再次测试函数执行。
内容的提问来源于stack exchange,提问作者enguelm
相关产品推荐
相关产品推荐

