You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda报错无法导入psycopg2模块,求技术解决方案

解决AWS Lambda导入psycopg2失败的问题

问题重现

导入模块时触发错误:

[ERROR] Runtime.ImportModuleError: Unable to import module 'expire_invites': No module named 'psycopg2'

已通过Terraform创建Lambda及psycopg2依赖层,Lambda创建成功但依赖无法识别,尝试过更换Python3.7适配包、用requirements.txt结合null_resource安装依赖均无效。

核心原因与解决方案

1. 修正Lambda层的zip包目录结构

Lambda的Python依赖层必须遵循固定目录结构:python/lib/<python版本>/site-packages/,依赖包需放在这个路径下才能被Lambda识别。

当前配置直接打包了psycopg2文件夹,导致zip内没有正确的层级,Lambda无法找到模块。调整步骤:

  • 在../../scripts/python/expire_invites/下创建目录结构:python/lib/python3.6/site-packages/
  • 将下载的psycopg2包所有文件移入site-packages/目录
  • 修改Terraform的archive_file配置,将source_dir指向最外层的python目录:
data "archive_file" "psycopg2_layer" {
  type        = "zip"
  source_dir  = "${path.module}/../../scripts/python/expire_invites/python"
  output_path = "${path.module}/../../scripts/python/expire_invites/psycopg2_layer.zip"
}

2. 验证层包结构

解压生成的psycopg2_layer.zip,确认内部路径为:

python/
└── lib/
    └── python3.6/
        └── site-packages/
            └── psycopg2/
                ├── ...(psycopg2的所有文件)

若结构不符,重新调整目录后再打包。

3. 确保依赖包与Lambda环境兼容

Lambda运行在Amazon Linux 2环境中,普通环境编译的psycopg2可能存在兼容性问题:

  • 若使用第三方预编译包,必须选择对应Python版本(如3.6)且适配Amazon Linux 2的版本
  • 更可靠的方式是用Docker在Lambda兼容环境中编译依赖:
docker run -v "$(pwd):/var/task" lambci/lambda:build-python3.6 pip install psycopg2-binary -t python/lib/python3.6/site-packages/

编译完成后直接打包python目录作为层即可。

4. 核对运行时一致性

如果切换到Python3.7的包,需同步修改:

  • aws_lambda_layer_version的compatible_runtimes为["python3.7"]
  • aws_lambda_function的runtime为python3.7

内容的提问来源于stack exchange,提问作者Christopher Moura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:32:58