我已经使用我的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"
]
]
}
任何帮助都很明显
答案 0 :(得分:6)
AWS Lambda运行时环境不包含PostgreSQL库,因此您需要将它们包含在AWS Lambda上传中。
这样做的一种方法是从GitHub的jkehler/awslambda-psycopg2回购中获取它们。请注意,您不需要从头开始构建此项目,因为repo在psycopg2 folder中包含一个预先构建的包,您可以将其简单地包含在Lambda上载中。
答案 1 :(得分:2)
来自jkehler/awslambda-psycopg2的psycopg2构建库是为python 3.6构建的,并确保在将代码上传到AWS lambda时,选择Python Runtime Environment作为3.6,并且该库应该可以工作。我花了整整一整天的时间,然后将其更改为3.6,然后导入错误就消失了。
答案 2 :(得分:0)
psycopg的最新更新(当我回答此问题时)修复了此问题。您需要将psycopg2-binary的版本更新为2.8.4。那对我有用。
psycopg2-binary==2.8.4
答案 3 :(得分:0)
截至2020年3月26日最新信息
我对依赖第三方库生产代码表示怀疑。在研究以下作品时,
仅当软件包是从MAC OS构建的时,才会发生此问题。
我今天可以确认,当我从Centos 7(AWS AMI)构建软件包时,该问题已解决
以下是我的方法
requirement.txt
psycopg2-binary==2.8.4
构建过程
pip install -r requirements.txt --target .
Lambda代码在根目录中
+-- lambda_function.py
+-- psycopg2
+-- psycopg2 files
压缩目录并测试lambda作品中的代码。
唯一的附加步骤是在Linux env而不是MAC OS中构建软件包
答案 4 :(得分:0)
对于Windows(就像在非基于Amazon AMI或Centos的任何操作系统中一样),最简单的修复方法是使用
适用于AWS Lambda的psycopg2 Python库
答案 5 :(得分:0)
代替使用psycopg2,请尝试使用pg8000 在命令提示符下转到您当前正在使用的目录(示例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中。
对我有用!