psycopg2文件夹压缩成python venv lambda函数



我试图将psycopg2的包添加到我的python lambda函数的压缩文件夹中。我正在使用Python版本3.8。这是psycopg2的文档psycopg2.

从这些文档中,我似乎必须将psycopg2-3.8的文件夹拉到lambda函数的压缩文件中。但是,我似乎不能让它成功运行。

我正在使用虚拟环境,并根据虚拟环境的这些AWS文档创建zip文件

要压缩psycopg文件夹,我运行zip -g my-deployment-package.zip psycopg2

我收到的错误是

{
"errorMessage": "Unable to import module 'test': No module named 'psycopg2._psycopg'",
"errorType": "Runtime.ImportModuleError"
}

如果能帮我解决这个问题就太好了。

psycopg2-binary是psycopg2的二进制pip包,包含所有依赖项,不需要编译。要在lambda函数中使用它,可以使用docker创建一个lambda层如AWS博客所述。

因此你可以添加psycopg2-binary到你的函数如下:

  1. 创建空文件夹,如mylayer.

  2. 进入文件夹,创建requirements.txt文件,内容为

psycopg2-binary
  1. 运行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"
  1. 将图层存档为zip:
zip -9 -r mylayer.zip python 
  1. 在AWS控制台上基于mylayer.zip创建lambda层。别忘了指定Compatible runtimepython3.8

  2. 将第5步创建的图层添加到函数中

  3. 我使用你的代码测试图层:

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']

注。

步骤在linux上执行。如果你没有,你可以创建一个linux ec2实例,如果你不确定如何修改Windows或Mac的命令,可以在那里安装docker。

相关内容

  • 没有找到相关文章

最新更新