Aws lambda 没有名为“psycopg2.\u psycopg”的模块:AWS Lambda中的ModuleNotFoundError

Aws lambda 没有名为“psycopg2.\u psycopg”的模块:AWS Lambda中的ModuleNotFoundError,aws-lambda,psycopg2,amazon-rds,Aws Lambda,Psycopg2,Amazon Rds,我已经用python文件和包括sqlalchemy和psycopg2在内的依赖项为AWS Lambda创建了一个部署包。该代码在本地访问数据库时非常有效。但是当我导入这个zip文件时,我得到了以下错误 No module named 'psycopg2._psycopg': ModuleNotFoundError 错误的堆栈跟踪是 { "errorMessage": "No module named 'psycopg2._psycopg'", "errorType": "ModuleN

我已经用python文件和包括sqlalchemy和psycopg2在内的依赖项为AWS Lambda创建了一个部署包。该代码在本地访问数据库时非常有效。但是当我导入这个zip文件时,我得到了以下错误

No module named 'psycopg2._psycopg': ModuleNotFoundError
错误的堆栈跟踪是

{
  "errorMessage": "No module named 'psycopg2._psycopg'",
  "errorType": "ModuleNotFoundError",
  "stackTrace": [
    [
      "/var/task/DBAccessLamdaHandler.py",
      50,
      "lambda_handler",
      "engine = create_engine(rds_host)"
    ],
    [
      "/var/task/sqlalchemy/engine/__init__.py",
      387,
      "create_engine",
      "return strategy.create(*args, **kwargs)"
    ],
    [
      "/var/task/sqlalchemy/engine/strategies.py",
      80,
      "create",
      "dbapi = dialect_cls.dbapi(**dbapi_args)"
    ],
    [
      "/var/task/sqlalchemy/dialects/postgresql/psycopg2.py",
      554,
      "dbapi",
      "import psycopg2"
    ],
    [
      "/var/task/psycopg2/__init__.py",
      50,
      "<module>",
      "from psycopg2._psycopg import (                     # noqa"
    ]
  ]
}

任何帮助都是值得欣赏的

AWS Lambda运行时环境不包括PostgreSQL库,因此您需要将它们包括在AWS Lambda上载中


一种方法是从GitHub的回购协议中获得它们。请注意,您不需要从头开始构建此项目,因为repo在中包含了一个预构建包,您只需将其包含在Lambda上传中即可

中的psycopg2构建库是为python 3.6构建的,请确保在将代码上载到AWS lambda时,选择python Runtime environment作为3.6,它应该可以工作。我花了整整一天的时间在这上面,当我改成3.6时,导入错误就消失了


如果您打算自己构建它,.

当我回答这个问题时,psycopg的最新更新修复了这个问题。您需要将psycopg2二进制文件的版本更新为2.8.4。这对我来说是个好办法

psycopg2-binary==2.8.4

最新日期为2020年3月26日

我怀疑我的产品代码是否依赖第三方库。关于以下工作的研究

只有当包是从MAC OS构建的时候,问题才会发生

今天我可以确认,当我从Centos 7 AWS AMI构建包时,这个问题已经解决

以下是我的方法

requirement.txt

psycopg2-binary==2.8.4
构建过程

pip安装-r requirements.txt-target。 Lambda代码位于根目录中

+-- lambda_function.py
+-- psycopg2
    +-- psycopg2 files
压缩目录并在lambda works中测试代码


唯一的附加步骤是在Linux env中而不是MAC OS中构建包。Windows版看起来就像任何不是在Amazon AMI或Centos上构建的操作系统一样,最简单的修复方法是使用

AWS Lambda的psycopg2 Python库


您可以找到它,而不是使用psycopg2,请尝试使用pg8000 在命令提示符下,转到当前正在工作的目录example F:\example pip安装pg8000-t-T用于在您正在工作的目录中安装pg8000

//handler.py 进口pg8000

database=''
host=''
port=''
user=''
password=''
conn = pg8000.connect(database=database, host=host, port=port, user=user, 
password=password)

def lambda_function(event, context):
   .
   .
   .
在编写代码后,将代码压缩并上传到aws lambda中


它为我工作

看,你不需要从头开始构建它。repo在psycopg2文件夹中包含一个预构建包,您只需将其包含在将要上载到Lambda的ZIP文件中即可。据称,我没有实际使用它。这很有帮助。谢谢,这个解决方案在无服务器框架下如何工作?在无服务器框架下,软件包是从requirements.txt文件安装的?@johnny看一看,我像这样包含了这个库,但它仍然不工作。我出了什么问题?对于任何使用CloudFormation+CodeBuild的人来说,buildspec.yml中的以下两行代码都非常有用:-git clonehttps://github.com/a-j/awslambda-psycopg2.git &&cd awslambda-psycopg2&&git签出python-3.8库和-cp-r awslambda-psycopg2/psycopg2-3.8./src&&mv./src/psycopg2-3.8./src/psycopg2tanks Nikhil,但我尝试了这个,但它在p3.6上不起作用,您能详细帮助我吗?@ganeshdeshmukh它在python 3.7上与我一起工作。我只是复制了Python3.7的整个文件夹,将其重命名为psycopg2,并使用lambda函数文件压缩它。将压缩后的文件上传到aws lambda后,它按预期工作。我想Python3.6的过程应该是类似的,我可以在Python3.6上使用它。我遵循了@Fanchenbao提到的相同程序,但不幸的是,这对我不起作用。它仍然会给我与OP.me相同的错误消息,您是否必须更改代码中的任何内容?即使在安装psycopg2 binary==2.8.4之后,仍然面临相同的错误。有没有人有其他方法来解决这个问题?这与AWS Lambda运行时有什么关系?pip首先在aws/codebuild/standard:2.0 imagePython运行时检查本地库上安装包。给这一个镜头-作品为我在生产日期这对我工作