AWS Lambda Python3.7环境Numpy/Pandas/s3fs层版本兼容问题求助

Lambda Python3.7 依赖层打包兼容方案
操作流程问题排查
你当前的打包流程存在两处核心问题:
- Windows环境下直接pip安装的依赖包含Windows专属的二进制执行文件,和Lambda运行的Amazon Linux 2 x86_64环境不兼容,直接打包上传必然会出现版本/架构不兼容报错
- 若没有按照Lambda层要求的目录结构打包,也会导致Lambda无法识别到依赖包
兼容版本推荐(适配Python 3.7.9 + Lambda x86_64环境)
不需要Docker的情况下,直接从PyPI下载对应版本的manylinux2014_x86_64架构的whl包即可,推荐兼容版本如下:
pandas==1.3.5:Python3.7支持的最高稳定pandas版本numpy==1.21.6:和pandas1.3.5完全兼容的numpy版本s3fs==2022.11.0:支持Python3.7且适配S3大文件读取的s3fs版本
正确打包步骤
- 创建层级目录:
python/lib/python3.7/site-packages/,该目录结构是Lambda层识别依赖的强制要求 - 将下载的三个whl文件依次解压,把解压得到的所有包文件全部放到上述
site-packages目录下 - 可选优化:删除目录下所有
.pyc文件、测试文件夹、文档文件夹,减小最终包体积,避免超出Lambda层250MB解压大小限制 - 选中
python文件夹直接打包为zip文件,压缩包根目录必须直接显示python文件夹,不能嵌套额外外层目录 - 将打包好的zip上传到S3后再创建Lambda层即可正常使用
大文件读取注意事项
读取2GB以上CSV文件时需要做如下配置避免报错:
- Lambda函数内存配置至少调至2GB以上,同时调整超时时间到匹配文件读取时长
- 不要将完整文件下载到Lambda本地/tmp目录(/tmp目录最大仅512MB),直接用
s3://路径传入pd.read_csv,同时指定chunksize参数分块读取,避免内存溢出
内容的提问来源于stack exchange,提问作者varsha patil
相关产品推荐
相关产品推荐

