AWS Lambda安装PyProj作为层后导入模块失败问题求助
问题根源
- 最核心的原因是Lambda Python层的目录结构不符合官方要求:AWS Lambda Python运行时加载层时,只会从层压缩包内的
python/目录下搜索第三方模块,你当前打包时将依赖放入了pyproj/目录,Lambda运行时无法识别该路径下的模块。 - 其他可能的诱因:
- 打包使用的Python版本和Lambda函数的运行时版本不一致
- 打包环境的CPU架构(如Mac M系列的arm64)和Lambda函数配置的架构不匹配
- 拷贝依赖时遗漏了
lib目录下的安装文件,仅拷贝了lib64目录内容
修复步骤
- 替换原有打包流程为符合Lambda规范的操作,代码如下:
mkdir folder cd folder virtualenv v-env source ./v-env/bin/activate # 需保证此处Python版本和你的Lambda函数运行时版本完全一致 pip3 install pyproj deactivate # 必须创建python目录,为Lambda固定识别的模块加载路径 mkdir python cd python # 同时拷贝lib、lib64下的依赖避免文件遗漏 cp -r ../v-env/lib64/python3.6/site-packages/* . cp -r ../v-env/lib/python3.6/site-packages/* . cd .. zip -r pyproj_layer.zip python # 发布层时指定和你函数匹配的Python运行时、兼容架构 aws lambda publish-layer-version --layer-name pyproj --zip-file fileb://pyproj_layer.zip --compatible-runtimes python3.6 --compatible-architectures "x86_64" "arm64"
- 校验Lambda函数配置:
- 确认函数的Python运行时版本和打包使用的Python版本完全一致
- 确认函数的CPU架构和你发布层时指定的兼容架构匹配
- 可选验证:如果修复后仍有问题,可以在函数代码中加入以下代码打印模块搜索路径,确认
/opt/python已被包含:
import sys print(sys.path)
内容的提问来源于stack exchange,提问作者fullaquestions
相关产品推荐
相关产品推荐

