AWS Lambda中Python函数jwt模块导入失败问题求助
以下是针对你遇到的No module named 'jwt'错误的排查和解决步骤:
确认运行时与层的Python版本完全匹配
检查Lambda函数的运行时版本(比如Python 3.9),确保你创建层时使用的Python版本和它完全一致。如果Lambda用的是3.10,而层里的包是用3.9安装的,就会出现模块找不到的问题。可以通过pip install pyjwt -t ./python/lib/pythonX.X/site-packages/指定版本安装,将X.X替换为Lambda的运行时版本。验证Lambda层的打包结构
层的zip包必须遵循正确的目录结构:解压后直接是python/lib/pythonX.X/site-packages/,里面包含jwt相关文件。打包时要进入python文件夹的上级目录,执行zip -r jwt-layer.zip python/,避免zip包顶层多一层文件夹(比如不要把包含python的文件夹整个压缩)。可以本地解压层的zip包,确认结构是否符合要求。修正PyJWT的导入和使用代码
PyJWT 2.x版本重构了API,不再支持from jwt import JWT的导入方式。如果你的层安装的是PyJWT 2.x+,需要修改代码:# 替换原来的from jwt import JWT import jwt # 创建JWT的代码替换为 encoded_jwt = jwt.encode(payload, signing_key, algorithm='RS256')如果你一定要用旧的
JWT类,需要在层中安装PyJWT 1.x版本(比如pip install pyjwt==1.7.1)。直接打包依赖到函数代码(替代层)
如果层的配置始终有问题,可以直接把依赖和代码打包在一起:- 本地新建一个文件夹,将你的函数代码放入其中
- 执行命令安装依赖到该文件夹:
pip install pyjwt -t ./你的文件夹路径 - 将整个文件夹压缩成zip包,上传到Lambda控制台替换原有代码包。
检查层的关联状态
进入Lambda函数的控制台页面,在“层”标签下确认你添加的JWT层已经被正确关联,没有被误删除或未启用。
内容的提问来源于stack exchange,提问作者Kunal Sharma

