在lambda上运行Psycopg版本3

发布于 2025-02-05 18:58:31 字数 1757 浏览 2 评论 0原文

我正在使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情丝乱 2025-02-12 18:58:31

我们完全放弃了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 and import pg8000.native in our script.py file.

若无相欠,怎会相见 2025-02-12 18:58:31

您想作为二进制安装:

RUN pip install "psycopg[binary]"

You want to install as a binary:

RUN pip install "psycopg[binary]"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文