AWS Lambda报No module named 'surveys'导入错误排查求助
AWS Lambda
Runtime.ImportModuleError 修复方案 一、打包规则/项目结构调整
- 确认
surveys目录下存在__init__.py文件(空文件即可),否则Python不会将该目录识别为可导入的模块包,这是最常见的遗漏点 - 若
surveys直接和lambda_function.py一起打包上传,二者必须都在压缩包的最顶层,不能嵌套在任意父目录中 - 若你已将
surveys下的.py文件移到压缩包根目录,需要同步修改lambda_function.py中的导入语句,删除surveys.前缀,比如原语句from surveys import common要改为import common - 若
surveys模块放在Lambda Layer中,必须严格遵循Python Layer的目录规范:所有Python模块必须放在Layer压缩包的python/lib/python<你的运行时版本>/site-packages/路径下,比如Python3.9运行时对应的路径为python/lib/python3.9/site-packages/surveys/,直接将模块放在Layer根目录无法被Lambda识别
二、AWS配置项调整
- Layer兼容配置匹配:确认你上传的Layer的「兼容运行时」和Lambda实际使用的Python版本完全一致,「兼容架构」和Lambda的架构配置(x86_64/arm64)完全匹配,否则Layer内的所有文件都不会被加载到运行环境中
- 路径调试:你可以在
lambda_function.py最开头加入以下代码,打印运行时的Python搜索路径,确认模块所在目录是否在搜索列表中:
import sys print(sys.path)
- 二进制依赖适配:pdftk、libgcj.so.10这类二进制文件放在Layer的
bin/目录是合规的,但需要确保二进制文件的编译架构和Lambda运行架构一致,x86环境下编译的二进制无法在arm64架构的Lambda上运行
临时验证方案
你可以先不上传任何Layer,仅把surveys目录和lambda_function.py打包在同一个压缩包根目录,确认__init__.py存在后测试是否还报模块找不到的错误,排除Layer的影响后再添加pdftk相关依赖层。
内容的提问来源于stack exchange,提问作者Stephen Stilwell
相关产品推荐
相关产品推荐

