Python版AWS Lambda函数报错:无法导入模块‘index’,本地正常云端运行失败
排查AWS Lambda "Unable to import module 'index'" 错误
嘿,我来帮你搞定这个问题——我之前也碰到过好几次:本地跑起来顺得不行,一上传到Lambda就报导入错误,大概率是这几个细节没处理到位:
1. 入口文件与Lambda配置不匹配
Lambda默认的处理程序是index.lambda_handler,意思是它会在zip包的根目录找index.py文件,然后调用里面的lambda_handler函数。
- 先检查你的代码文件名是不是
index.py,如果不是,要么把文件名改成index.py,要么去Lambda控制台的「配置」→「常规配置」→「处理程序」里,改成你的文件名+函数名(比如my_script.my_custom_handler)。
2. 第三方依赖没打包进zip包
如果你的POST请求用到了requests这类Python标准库之外的包,本地环境装了但Lambda默认不带,就会导致导入失败。
解决步骤:
- 本地新建一个空文件夹,把你的
index.py放进去; - 打开终端进入这个文件夹,执行
pip install requests -t .(把requests换成你实际用的依赖包); - 选中文件夹里的所有内容(包括
index.py、生成的依赖文件夹),直接压缩成zip包——注意不要把整个文件夹打包,要让文件都在zip的根目录里。
另外也可以用Lambda层来管理依赖,后续更新会更方便:把依赖单独打包成层上传,再在Lambda函数里关联这个层就行。
3. 打包的目录层级错了
很多人踩过这个坑:把包含index.py的文件夹直接压缩,结果Lambda解压后,index.py藏在子文件夹里,自然找不到。
- 正确操作:打开存放
index.py的文件夹,选中里面的所有文件和文件夹,右键压缩成zip,确保解压后index.py直接在根目录。
4. Python版本不兼容
本地用的Python版本和Lambda配置的版本不一致,也可能导致导入问题(比如某些包在不同版本里结构有变化)。
- 先在本地终端执行
python --version确认版本; - 去Lambda控制台的「配置」→「常规配置」→「运行时」,把Python版本改成和本地一致的(比如本地用3.9,Lambda也选3.9)。
5. 文件权限问题(少见但可能)
如果zip包中的文件权限设置不对,Lambda运行时无法读取,也会报导入错误。
- 打包前在本地给文件设置可读权限:终端执行
chmod 644 index.py,依赖文件夹执行chmod 755 -R ./requests(替换成你的依赖文件夹名),然后再打包。
如果还是不行,你可以把打包好的zip解压出来,模拟Lambda的环境结构,确认index.py和依赖都在根目录,而且本地能正常导入。
内容的提问来源于stack exchange,提问作者Pulkit
相关产品推荐
相关产品推荐

