Error: No Module Named 'psycopg2.__psycopg' in AWS Lambda with python 3.8.7 version

Error: No Module Named 'psycopg2.__psycopg' in AWS Lambda with python 3.8.7 version

我已经在 window 10(python 版本 3.8.7)中安装了 psycopg2==2.8.6 模块,我可以毫无问题地导入我的代码。但是当我压缩并将其上传到 AWS Lambda 时出现此错误。所有库文件夹都在正确的位置,AWS 也有 python 3.8.7,但不确定为什么会出现此错误。我试图降级 psycopg2=2.8.5 但没有成功。请优先提供一些帮助

您的问题暗示您已经在 Windows 上下载了 psycopg2 库,并试图在最终使用 Linux 操作系统的 Lambda 运行时环境中使用相同的库。

AWS Documentation on Lambda Runtime Environment 提供了更多文档,但要实现此功能,您的选择很少

  1. 运行 亚马逊提供了 Linux 容器,在其中安装和压缩依赖项。您可以通过 运行 在您的项目文件夹
  2. 中关注来实现此目的
$ docker run --rm -v $PWD:/src --entrypoint '' amazon/aws-lambda-python:3.8 bash
# execute below within container
$ pip3 install psycopg2-binary -t /src/lambdalib

或者,您可以在 Linux 平台上 构建 扩展,在该容器中使用以下

$ docker run --rm -v $PWD:/src --entrypoint '' amazon/aws-lambda-python:3.8 bash
# execute below within container
$ yum -y install cmake c++ gcc postgresql-devel && pip3 install psycopg2 -t /src/lambdalib

这将在您的 lambdalib 文件夹中安装 linux 二进制版本的 psycopg2。我建议您从云控制台或 Cloud9 IDE 执行此操作,如果 Windows 工作站没有

  1. 搜索 psycopg2 的公开可用 Lambda Layer,将其添加到您的 lambda 函数中,并避免完全打包此库。

我们可以使用 AWS Chalice 使用 python3 和 requiremetns

来部署 lambda 函数
requests
psycopg2-binary

确保运行 chalice 的环境具有默认的 python 版本 3(我们可以使用符号链接 ln -s /usr/bin/python3.8 /usr/bin/python

⚡ $ chalice --version
chalice 1.21.6, python 3.8.5, linux 5.8.0-49-generic

这里有完整的解决方案:https://dev.to/vumdao/connect-postgres-database-using-lambda-function-1mca