使用AWS CDK创建Lambda Layer时Langchain遇Numpy导入错误求助
解决Mac M1下AWS CDK部署Langchain Lambda Layer的Numpy导入错误
问题原因
Mac M1(ARM64)本地环境安装的Numpy依赖包含源码目录结构,或CDK直接使用本地环境打包时未适配Lambda的Amazon Linux ARM64运行环境,导致Lambda运行时误从Numpy源码目录触发导入错误。
解决方案
方法一:通过CDK Bundling配置强制在Lambda兼容环境中构建依赖
修改Layer的CDK代码,添加bundling选项,使用Lambda官方Python镜像在容器内构建依赖,确保产物适配Lambda运行环境:
langchain_lambda_layer = _alambda.PythonLayerVersion( self, "langchain-lambda-layer", entry="./aws_bedrock_langchain_python_cdk/lambda/layer/langchain_latest/", compatible_runtimes=[_lambda.Runtime.PYTHON_3_11], compatible_architectures=[_lambda.Architecture.ARM_64], bundling=_lambda.BundlingOptions( image=_lambda.Runtime.PYTHON_3_11.bundling_image, command=[ "bash", "-c", "pip install -r requirements.txt -t /asset-output/python && rm -rf /asset-output/python/*.dist-info /asset-output/python/__pycache__" ], ), )
方法二:手动清理Layer目录中的冗余文件
如果不想用容器构建,先清空Layer的entry目录下的python子目录,再重新安装依赖并清理Numpy源码相关文件:
- 进入Layer的entry目录:
cd ./aws_bedrock_langchain_python_cdk/lambda/layer/langchain_latest/
- 清理原有依赖(如果存在):
rm -rf python/
- 安装适配ARM64的依赖到指定目录:
pip install -r requirements.txt -t python/ --platform manylinux2014_aarch64 --only-binary=:all:
- 删除Numpy源码目录中触发错误的文件:
rm -rf python/numpy/*.py python/numpy/README.md python/numpy/setup.py
方法三:使用Docker手动构建Layer
- 在Layer的entry目录下创建临时Dockerfile:
FROM public.ecr.aws/sam/build-python3.11:latest-arm64 WORKDIR /build COPY requirements.txt . RUN pip install -r requirements.txt -t python/ RUN rm -rf python/*.dist-info python/__pycache__
- 构建镜像并导出依赖到本地目录:
docker build -t langchain-layer-build . docker run --rm -v $(pwd)/:/output langchain-layer-build cp -r /build/python /output/
验证步骤
- 销毁原有堆栈并重新部署:
cdk destroy && cdk deploy
- 测试Lambda函数,确认Numpy导入错误消失。
内容的提问来源于stack exchange,提问作者dinesh mane
相关产品推荐
相关产品推荐

