在lambda上运行Psycopg版本3
我正在使用python3.9的lambda docker基本图像
来自public.ecr.aws/lambda/python:3.9
,我正在尝试在代码中使用psycopg。这是一个最小可重复的示例:
Python3.9
# This works!
# FROM python:3.9
# This doesn't work
FROM public.ecr.aws/lambda/python:3.9
RUN pip install psycopg
COPY . .
ENTRYPOINT ["python", "script.py"]
使用
# I'm running these docker commands
# docker build -t test .
# docker rune test
import psycopg
psycopg.connect("host=localhost")
print('hello world')
基本图像我看到正确的输出。使用AWS lambda基本映像,我看到了:
Traceback (most recent call last):
File "/var/task/script.py", line 4, in <module>
import psycopg
File "/var/lang/lib/python3.9/site-packages/psycopg/__init__.py", line 9, in <module>
from . import pq # noqa: F401 import early to stabilize side effects
File "/var/lang/lib/python3.9/site-packages/psycopg/pq/__init__.py", line 114, in <module>
import_from_libpq()
File "/var/lang/lib/python3.9/site-packages/psycopg/pq/__init__.py", line 106, in import_from_libpq
raise ImportError(
ImportError: no pq wrapper available.
Attempts made:
- couldn't import psycopg 'c' implementation: No module named 'psycopg_c'
- couldn't import psycopg 'binary' implementation: No module named 'psycopg_binary'
- couldn't import psycopg 'python' implementation: /lib64/libpq.so.5: undefined symbol: PQconninfo
我已经尝试安装psycopg-binary,但是我的新错误存在: trackback(最近的最新调用):文件“/var/task/script.py”,第4行,in&lt; module&gt;导入psycopg modulenotfounderror:没有名为“ psycopg”
的模块,
我想找到一种在lambda函数中使用psycopg的方法。我们使用psycopg2具有旧功能,但是缺乏维护令人担忧(Psycopg似乎更有效+支持Postgres V14+和Python3.9+),因此我们想搬到Psycopg(现在已发布了版本3)。
感谢您提前的帮助
I'm using the lambda docker base image for python3.9
FROM public.ecr.aws/lambda/python:3.9
And I'm trying to use psycopg in my code. Here is a minimum reproducible example:
Dockerfile
# This works!
# FROM python:3.9
# This doesn't work
FROM public.ecr.aws/lambda/python:3.9
RUN pip install psycopg
COPY . .
ENTRYPOINT ["python", "script.py"]
script.py
# I'm running these docker commands
# docker build -t test .
# docker rune test
import psycopg
psycopg.connect("host=localhost")
print('hello world')
Using the python3.9 base image I see the correct output. Using the AWS lambda base image I see:
Traceback (most recent call last):
File "/var/task/script.py", line 4, in <module>
import psycopg
File "/var/lang/lib/python3.9/site-packages/psycopg/__init__.py", line 9, in <module>
from . import pq # noqa: F401 import early to stabilize side effects
File "/var/lang/lib/python3.9/site-packages/psycopg/pq/__init__.py", line 114, in <module>
import_from_libpq()
File "/var/lang/lib/python3.9/site-packages/psycopg/pq/__init__.py", line 106, in import_from_libpq
raise ImportError(
ImportError: no pq wrapper available.
Attempts made:
- couldn't import psycopg 'c' implementation: No module named 'psycopg_c'
- couldn't import psycopg 'binary' implementation: No module named 'psycopg_binary'
- couldn't import psycopg 'python' implementation: /lib64/libpq.so.5: undefined symbol: PQconninfo
I've tried installing psycopg-binary instead but my new error there is:Traceback (most recent call last): File "/var/task/script.py", line 4, in <module> import psycopg ModuleNotFoundError: No module named 'psycopg'
I'd like to find a way to use psycopg in a Lambda function. We have older functions using psycopg2 but the lack of maintenance is worrying (psycopg appears more active + supports postgres v14+ and python3.9+) so we'd like to move to psycopg (which now has a version 3 released).
Thanks for your help in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我们完全放弃了psycopg,并移至
pg8000
,这是一个纯粹的python实现,我们编写的所有代码都可以轻松移植。这样,我们就不必担心二进制或其他胡说八道。https://github.com/tlocke/pg8000
那么简单
pip pip pip pip install pg8000 是我们所需的全部dockerfile,
导入pg8000。
We ditched psycopg entirely and moved to
pg8000
which is a pure python implementation and all of the code we wrote was able to port over easily. This way we don't need to worry about binaries or other nonsense.https://github.com/tlocke/pg8000
Then the simple
pip install pg8000
is all our Dockerfile needed andimport pg8000.native
in ourscript.py
file.您想作为二进制安装:
You want to install as a binary: