psycopg2 文件夹压缩到 python venv lambda 函数
psycopg2 folder zipped into python venv lambda function
我正在尝试将 psycopg2 的包添加到我的 python lambda 函数的压缩文件夹中。我正在使用 Python 版本 3.8。这是 psycopg2 文档 psycopg2.
从这些文档看来,我必须将 psycopg2-3.8 的文件夹拉入我的 lambda 函数的压缩文件中。但是,我似乎无法成功 运行.
我正在使用虚拟环境并根据这些 AWS 文档创建 zip 文件for virtual environment
要压缩 psycopg 文件夹,我正在 运行ning zip -g my-deployment-package.zip psycopg2
我收到的错误是
{
"errorMessage": "Unable to import module 'test': No module named 'psycopg2._psycopg'",
"errorType": "Runtime.ImportModuleError"
}
任何解决此问题的帮助都会很棒。
psycopg2-binary is a binary pip package of psycopg2
which comes with all dependencies and does not require compiling. To use it in your lambda function, you can create a lambda layer using docker as described in the AWS blog.
因此您可以将 psycopg2-binary
添加到您的函数中,如下所示:
创建空文件夹,例如mylayer
.
转到文件夹并创建 requirements.txt
文件,内容为
psycopg2-binary
- 运行 以下 docker 命令:
该命令将为 python3.8:
创建图层
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
- 将图层存档为 zip:
zip -9 -r mylayer.zip python
在 AWS 控制台中基于 mylayer.zip
创建 lambda 层。不要忘记将 Compatible runtime
指定为 python3.8
。
将第 5 步中创建的图层添加到您的函数中。
我用你的代码测试了层:
import psycopg2
def lambda_handler(event, context):
print(dir(psycopg2))
return "ok"
它工作 正确:
['BINARY', 'Binary', 'DATETIME', 'DataError', 'DatabaseError', 'Date', 'DateFromTicks', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NUMBER', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'ROWID', 'STRING', 'Time', 'TimeFromTicks', 'Timestamp', 'TimestampFromTicks', 'Warning', '__builtins__', '__cached__', '__doc__', '__file__', '__libpq_version__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_connect', '_ext', '_json', '_psycopg', '_range', 'apilevel', 'compat', 'connect', 'errors', 'extensions', 'paramstyle', 'threadsafety', 'tz']
p.s.
这些步骤是在 linux 上执行的。如果你没有,你可以创建一个 linux ec2 实例并在那里设置 docker 如果你不确定如何修改 Windows 或 Mac 的命令。
我正在尝试将 psycopg2 的包添加到我的 python lambda 函数的压缩文件夹中。我正在使用 Python 版本 3.8。这是 psycopg2 文档 psycopg2.
从这些文档看来,我必须将 psycopg2-3.8 的文件夹拉入我的 lambda 函数的压缩文件中。但是,我似乎无法成功 运行.
我正在使用虚拟环境并根据这些 AWS 文档创建 zip 文件for virtual environment
要压缩 psycopg 文件夹,我正在 运行ning zip -g my-deployment-package.zip psycopg2
我收到的错误是
{
"errorMessage": "Unable to import module 'test': No module named 'psycopg2._psycopg'",
"errorType": "Runtime.ImportModuleError"
}
任何解决此问题的帮助都会很棒。
psycopg2-binary is a binary pip package of psycopg2
which comes with all dependencies and does not require compiling. To use it in your lambda function, you can create a lambda layer using docker as described in the AWS blog.
因此您可以将 psycopg2-binary
添加到您的函数中,如下所示:
创建空文件夹,例如
mylayer
.转到文件夹并创建
requirements.txt
文件,内容为
psycopg2-binary
- 运行 以下 docker 命令:
该命令将为 python3.8:
创建图层docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
- 将图层存档为 zip:
zip -9 -r mylayer.zip python
在 AWS 控制台中基于
mylayer.zip
创建 lambda 层。不要忘记将Compatible runtime
指定为python3.8
。将第 5 步中创建的图层添加到您的函数中。
我用你的代码测试了层:
import psycopg2
def lambda_handler(event, context):
print(dir(psycopg2))
return "ok"
它工作 正确:
['BINARY', 'Binary', 'DATETIME', 'DataError', 'DatabaseError', 'Date', 'DateFromTicks', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NUMBER', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'ROWID', 'STRING', 'Time', 'TimeFromTicks', 'Timestamp', 'TimestampFromTicks', 'Warning', '__builtins__', '__cached__', '__doc__', '__file__', '__libpq_version__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_connect', '_ext', '_json', '_psycopg', '_range', 'apilevel', 'compat', 'connect', 'errors', 'extensions', 'paramstyle', 'threadsafety', 'tz']
p.s.
这些步骤是在 linux 上执行的。如果你没有,你可以创建一个 linux ec2 实例并在那里设置 docker 如果你不确定如何修改 Windows 或 Mac 的命令。