【问题标题】:Poetry python: How to install Psycopg2 with Postgres running from Docker [duplicate]Poetry python:如何使用从 Docker 运行的 Postgres 安装 Psycopg2 [重复]
【发布时间】:2022-02-21 00:48:38
【问题描述】:

我在旧笔记本电脑上设置了一个项目,并在本地安装了 Postgresql,并使用 Poetry 作为包管理器。现在我搬进另一台笔记本电脑。在这一点上,我想使用 Docker 的 Postgres,所以我没有安装它。但是当我运行poetry installpoetry.lock 文件设置项目时,它无法安装 Psycopg2 并出现错误:

Error: pg_config executable not found.

当我搜索时,它需要在本地安装 Postgres。那么,如何使用来自 Docker 的 Postgres 从 lock 文件中安装 Psycopg2?

【问题讨论】:

  • 您只需要 C PostgreSQL 头文件,不一定需要数据库本身。一旦你构建了 Docker 镜像,你甚至不需要它;一切都嵌入到数据库中。
  • @DavidMaze,用例将本地客户端(python 代码)连接到容器中的 postgres。系统需要标头,除非您也想在容器中运行 python 应用程序,这可能不适合开发。

标签: python postgresql docker psycopg2 python-poetry


【解决方案1】:

在安装 psycopg2 之前应安装 PostgreSQL(开发或任何稳定版本)。您计划使用来自 docker 的数据库服务器,这非常好。但是,要安装 psycopg2,您需要在主机中安装 Postgres。但是,当您在 docker 中运行应用程序时,主机中也不需要它。您可以查看this 答案以获取有关在您的操作系统中安装 psycopg2 的帮助。

【讨论】:

    【解决方案2】:

    你不需要安装 Postgres 本身,但你需要libpg

    libpq 是 C 应用程序程序员到 PostgreSQL 的接口。 libpq 是一组库函数,允许客户端程序将查询传递给 PostgreSQL 后端服务器并接收这些查询的结果。

    libpq 也是其他几个 PostgreSQL 应用程序接口的底层引擎,包括为 C++、Perl、Python、Tcl 和 ECPG 编写的那些。因此,如果您使用其中一个软件包,libpq 行为的某些方面将对您很重要。特别是,第 34.15 节、第 34.16 节和第 34.19 节描述了对使用 libpq 的任何应用程序的用户可见的行为。

    因此,pyscopg2 documentation recommends 安装包python3-devlibpg-dev

    sudo apt install python3-dev libpg-dev 
    

    以下内容写在他们的文档中:

    Psycopg 是 libpq PostgreSQL 客户端库的 C 包装器。要从您需要的来源安装它:

    C 编译器。

    Python 头文件。它们通常安装在一个包中,例如 python-dev 或 python3-dev。诸如 error: Python.h: No such file or directory 之类的消息表明缺少 Python 标头。

    libpq 头文件。它们通常安装在 libpq-dev 等软件包中。如果您收到错误:libpq-fe.h: No such file or directory 您缺少它们。

    pg_config 程序:它通常由 libpq-dev 包安装,但有时它不在 PATH 目录中。将它放在 PATH 中大大简化了安装,因此尝试运行 pg_config --version:如果它返回错误或意外的版本号,则找到包含正确 libpq 版本附带的 pg_config 的目录(通常是 /usr/lib/postgresql/ X.Y/bin/) 并将其添加到 PATH:

    $ export PATH=/usr/lib/postgresql/X.Y/bin/:$PATH
    

    如果您不希望这样,您可以通过 python 包psycopg2-binary 使用预编译的二进制文件,虽然不建议这样做。

    【讨论】:

    • 对于那些与我有同样问题的人:我需要将 pg_config 添加到 PATH 中。你可以通过以下方式找到它的位置:find / -name pg_config 2>/dev/null 然后我需要在 PATH 中添加一些与 OpenSSL 相关的东西,跟在 github.com/psycopg/psycopg2/issues/1200#issuecomment-770198398 之后:export LDFLAGS="-L/usr/local/ opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include" 在这些之后,它对我有用。
    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 2020-03-22
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    相关资源
    最近更新 更多