Aws lambda 没有名为“psycopg2.\u psycopg”的模块:AWS Lambda中的ModuleNotFoundError
我已经用python文件和包括sqlalchemy和psycopg2在内的依赖项为AWS Lambda创建了一个部署包。该代码在本地访问数据库时非常有效。但是当我导入这个zip文件时,我得到了以下错误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
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运行时检查本地库上安装包。给这一个镜头-作品为我在生产日期这对我工作