升级Python3.9后AWS Lambda报错:找不到psycopg2._psycopg模块
Python 3.9环境下AWS Lambda函数导入psycopg2报错的解决思路
问题背景
我有一个原本运行在Python 3.6环境的AWS Lambda函数,升级到Python 3.9运行时后出现导入错误。我已经同步将Lambda Layers更新到了3.9版本,但问题仍然存在,升级前函数运行完全正常。请问还可以尝试哪些解决方法?
报错详情
测试响应
{ "错误信息": "无法导入模块'av-oa-moa-hana-shortages': 找不到名为'psycopg2._psycopg'的模块", "错误类型": "Runtime.ImportModuleError", "请求ID": "6d3c186e-74c5-4fd3-907a-c1506476ba9b", "堆栈跟踪": [] }
函数日志
/opt/python/jmespath/visitor.py:32: 语法警告:使用"is"比较字面量,是否应为"=="? if x is 0 or x is 1: /opt/python/jmespath/visitor.py:32: 语法警告:使用"is"比较字面量,是否应为"=="? if x is 0 or x is 1: /opt/python/jmespath/visitor.py:34: 语法警告:使用"is"比较字面量,是否应为"=="? elif y is 0 or y is 1: /opt/python/jmespath/visitor.py:34: 语法警告:使用"is"比较字面量,是否应为"=="? elif y is 0 or y is 1: /opt/python/jmespath/visitor.py:260: 语法警告:使用"is"比较字面量,是否应为"=="? if original_result is 0: 开始 请求ID: 6d3c186e-74c5-4fd3-907a-c1506476ba9b 版本: $LATEST LAMBDA_WARNING: 未处理的异常。最可能的原因是函数代码存在问题。但在极少数情况下,Lambda运行时更新可能导致意外的函数行为。对于使用托管运行时的函数,运行时更新可能由函数变更触发,也可能自动应用。要确定运行时是否已更新,请检查INIT_START日志条目里的运行时版本。如果此错误与运行时版本变更相关,你可以通过暂时回滚到之前的运行时版本来缓解此错误。 [错误] Runtime.ImportModuleError: 无法导入模块'av-oa-moa-hana-shortages': 找不到名为'psycopg2._psycopg'的模块 回溯(最近的调用最后):结束 请求ID: 6d3c186e-74c5-4fd3-907a-c1506476ba9b 报告 请求ID: 6d3c186e-74c5-4fd3-907a-c1506476ba9b 耗时: 3.60毫秒 计费耗时: 4毫秒 内存大小: 512MB 最大内存使用: 56MB 初始化耗时: 615.23毫秒
解决方法
- 适配psycopg2版本:Python 3.9需要对应版本的psycopg2,优先使用
psycopg2-binary或者AWS官方适配Lambda的psycopg2层,确保依赖匹配Lambda的Amazon Linux 2运行环境。 - 检查Layer目录结构:Lambda Layer的Python模块必须放在
python/lib/python3.9/site-packages/路径下,解压Layer包验证目录结构是否正确,避免嵌套或路径错误。 - 本地模拟Lambda环境排查:用Docker拉取
amazonlinux:2镜像,安装Python 3.9后复制函数和Layer依赖,本地运行导入测试,定位是否为依赖缺失或路径问题。 - 直接打包psycopg2到函数包:若Layer方式存在问题,将适配Amazon Linux 2的psycopg2版本直接打包到Lambda函数部署包中,规避Layer路径冲突。
- 排查依赖冲突:导出函数和Layer的依赖列表(用
pip freeze),对比升级前后的依赖差异,检查是否有其他依赖覆盖或破坏了psycopg2文件。 - 验证运行时环境:查看INIT_START日志中的运行时版本信息,确认Lambda使用的是标准Python 3.9托管运行时(基于Amazon Linux 2),排除自定义运行时的环境差异影响。
内容的提问来源于stack exchange,提问作者sromit
相关产品推荐
相关产品推荐

