Kat*_*jan 5 psycopg2 amazon-rds aws-lambda
我已经使用我的python文件以及包括sqlalchemy和psycopg2在内的依赖项为AWS Lambda创建了一个部署程序包。该代码可以完美地在本地访问数据库。但是,当我导入此zip文件时,出现以下错误。
No module named 'psycopg2._psycopg': ModuleNotFoundError
Run Code Online (Sandbox Code Playgroud)
错误的堆栈跟踪为
{
"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"
]
]
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都是可观的
Nik*_*ran 13
jkehler/awslambda-psycopg2 中的 psycopg2 构建库是为 python 3.6 构建的,并确保在将代码上传到 AWS lambda 时,选择 Python 运行时环境作为 3.6,它应该可以工作。我为此纠结了一整天,然后当我更改为 3.6 时,导入错误就消失了。
如果您打算尝试自己构建它,请记住,您必须在与 AWS 目标具有相同架构的机器或 VM 上构建。
Vin*_*t J 11
与其他答案一样,psycopg2-binary 对于 python3.9 工作得很好(看起来其他包awslambda-psycopg2仅适用于 python3.6)。
但是,如果您在发送到 aws lambda 之前在 MacO 上运行,则必须为 pip 安装指定平台,如下所示:
pip3.9 install --platform=manylinux1_x86_64 --only-binary=:all: psycopg2-binary
Run Code Online (Sandbox Code Playgroud)
AWS Lambda运行时环境不包含PostgreSQL库,因此您需要将它们包含在AWS Lambda上传文件中。
一种方法是从GitHub 的jkehler / awslambda-psycopg2存储库中获取它们。请注意,您不需要从头开始构建此项目,因为该存储库在psycopg2文件夹中包含一个预先构建的包,您可以将其简单地包含在Lambda上传中。
最新截至 2020 年 3 月 26 日
我对依赖第三方库来获取我的生产代码持怀疑态度。研究了以下工作,
仅当软件包是从 MAC OS 构建时才会出现此问题。
我今天可以确认,当我从 Centos 7 (AWS AMI) 构建软件包时,问题已得到解决
以下是我的做法
需求.txt
psycopg2-binary==2.8.4
Run Code Online (Sandbox Code Playgroud)
构建过程
psycopg2-binary==2.8.4
Run Code Online (Sandbox Code Playgroud)
Lambda代码位于根目录中
+-- lambda_function.py
+-- psycopg2
+-- psycopg2 files
Run Code Online (Sandbox Code Playgroud)
压缩目录并在 lambda 中测试代码是否有效。
唯一的额外步骤是使用 Docker 容器在 Linux 环境(而不是 macOS)中构建包。可以在此处找到示例:使用 Docker 从 macOS 部署 AWS Amplify Python Lambda
小智 6
psycopg2 python 包需要 Postgres 库,而 AWS Lambda 函数使用的 AMI 中缺少该库。
最简单的解决方案是使用具有所需库的预编译包 aws-psycopg2。该包存在于 PyPi 存储库中。
pip 安装 aws-psycopg2
之后,只需在程序中照常导入 psycopg2 即可。下面给出了导入示例。
import psycopg2 有了这个包,我的 Lambda 函数开始完美运行。
| 归档时间: |
|
| 查看次数: |
9093 次 |
| 最近记录: |