AWS Lambda无法导入lambda_function模块问题咨询
我之前也碰到过一模一样的坑!在线IDE里跑代码完全正常,一打包上传就报这个导入错误,折腾了好一阵才捋清楚几个核心排查方向,给你分享下:
1. 检查打包结构是否符合Lambda要求
Lambda要求你的lambda_function.py必须在压缩包的根目录,不能嵌套在子文件夹里。很多人踩坑是因为把整个项目文件夹打包了——比如本地项目是my-lambda-project/,里面放着lambda_function.py,结果打包成my-lambda-project.zip,解压后变成my-lambda-project/lambda_function.py,这就会导致Lambda找不到模块。
正确的打包方式:
- 打开终端,进入存放
lambda_function.py的目录 - 执行打包命令:
zip -r lambda-package.zip .
这样压缩包里的根目录就直接包含lambda_function.py和所有依赖文件了。
2. 排查依赖包的兼容性
Lambda的运行环境是基于Amazon Linux的,如果你在Windows/Mac本地安装带C扩展的依赖(比如numpy、pandas、psycopg2这类),本地编译的二进制文件和Lambda环境不兼容,会间接导致模块导入失败。
解决办法:
- 用Lambda层来管理依赖:把依赖打包成层,附加到函数上,避免本地编译的问题
- 用Docker模拟Lambda环境安装依赖:拉取对应Python版本的Lambda镜像(比如
public.ecr.aws/sam/build-python3.9),在容器里创建虚拟环境并安装依赖,再把依赖复制到项目目录打包
3. 确保文件权限正确
Linux系统下,Lambda执行时需要能读取你的代码文件和依赖包。如果打包时文件权限设置错误(比如只有所有者能读),Lambda就会因无法读取文件而报错。
打包前可以执行命令调整权限:
chmod 644 lambda_function.py chmod -R 644 ./your-dependency-folder/
4. 确认依赖包的安装位置
如果用了虚拟环境,别直接打包venv文件夹!要把虚拟环境里site-packages的内容复制到项目根目录再打包:
cp -r venv/lib/python3.9/site-packages/* ./
这样依赖包就和lambda_function.py处于同一层级,Lambda才能正确导入。
小技巧
如果还是找不到问题,把你上传的Lambda压缩包下载下来解压,直接检查文件结构和内容——大部分情况下,一眼就能看出是结构不对还是依赖缺失。
内容的提问来源于stack exchange,提问作者Spencer Goff

