当前位置: 首页 > 面试题库 >

错误:在Docker的Alpine上安装psycopg2时找不到pg_config可执行文件

湛光明
2023-03-14
问题内容

我正在尝试将Postgres与Docker一起构建Flask应用程序。我想连接到Postgres的AWS
RDS实例,但是将Docker用于我的Flask应用程序。但是,在尝试设置时psycopg2会遇到错误,因为找不到pg_config。这是错误:

Building api
Step 1/5 : FROM python:3.6.3-alpine3.6
 ---> 84c98ca3b5c5
Step 2/5 : WORKDIR /usr/src/app
 ---> Using cache
 ---> 407c158f5ee4
Step 3/5 : COPY . .
 ---> 966df18d329e
Step 4/5 : RUN pip install -r requirements.txt
 ---> Running in 284cc97aeb63
Collecting aniso8601==1.3.0 (from -r requirements.txt (line 1))
  Downloading aniso8601-1.3.0.tar.gz (57kB)
Collecting click==6.7 (from -r requirements.txt (line 2))
  Downloading click-6.7-py2.py3-none-any.whl (71kB)
Collecting Flask==0.12.2 (from -r requirements.txt (line 3))
  Downloading Flask-0.12.2-py2.py3-none-any.whl (83kB)
Collecting Flask-RESTful==0.3.6 (from -r requirements.txt (line 4))
  Downloading Flask_RESTful-0.3.6-py2.py3-none-any.whl
Collecting Flask-SQLAlchemy==2.3.2 (from -r requirements.txt (line 5))
  Downloading Flask_SQLAlchemy-2.3.2-py2.py3-none-any.whl
Collecting itsdangerous==0.24 (from -r requirements.txt (line 6))
  Downloading itsdangerous-0.24.tar.gz (46kB)
Collecting Jinja2==2.9.6 (from -r requirements.txt (line 7))
  Downloading Jinja2-2.9.6-py2.py3-none-any.whl (340kB)
Collecting MarkupSafe==1.0 (from -r requirements.txt (line 8))
  Downloading MarkupSafe-1.0.tar.gz
Collecting psycopg2==2.7.3.1 (from -r requirements.txt (line 9))
  Downloading psycopg2-2.7.3.1.tar.gz (425kB)
    Complete output from command python setup.py egg_info:
    running egg_info
    creating pip-egg-info/psycopg2.egg-info
    writing pip-egg-info/psycopg2.egg-info/PKG-INFO
    writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
    writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
    writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'
    Error: pg_config executable not found.

    Please add the directory containing pg_config to the PATH
    or specify the full executable path with the option:

        python setup.py build_ext --pg-config /path/to/pg_config build ...

    or with the pg_config option in 'setup.cfg'.

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-01lf5grh/psycopg2/
ERROR: Service 'api' failed to build: The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1

这是我的Dockerfile

FROM python:3.6.3-alpine3.6

WORKDIR /usr/src/app

COPY . .

RUN pip install -r requirements.txt

CMD ["python", "app.py"]

许多其他问题在本地似乎也有类似的问题,但没有一个涉及使用Docker。
这似乎是一个Docker问题,因为我可以设置本地虚拟环境,并且安装正常,因为我在本地安装了Postgres,并且可以在本地找到我pg_config

看来在容器构建/设置期间,Docker试图pg_config在容器内查找。pg_config即使我不会使用Postgres的容器化实例,而是使用RDS上的实例,是否可以在容器中安装?

欢迎提供有关如何解决此问题的任何建议。谢谢!


问题答案:

经过Python 3.4.8、3.5.5、3.6.5和2.7.14的测试(只需将3替换为2):

# You can use a specific version too, like python:3.6.5-alpine3.7
FROM python:3-alpine

WORKDIR /usr/src/app

COPY requirements.txt .

RUN \
 apk add --no-cache postgresql-libs && \
 apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev && \
 python3 -m pip install -r requirements.txt --no-cache-dir && \
 apk --purge del .build-deps

COPY . .

CMD ["python3", "app.py"]

说明:要构建Psycopg,您需要安装软件包gcc musl-dev postgresql- dev。然后,您还需要pg_config可执行文件:虽然可以简单地安装postgresql-devpostgresql- libs但也可以正常工作,并且占用的空间少12 MB。

这是答案的原始版本(基于Dockerfile),在该版本中,我手动将Python安装到纯Alpine映像上,因为那时Python并未提供Python
3.6和Alpine 3.7的Docker映像。如果要这样安装Python 2.7,也可以这样做apk add py2-pippy- pip在较早的Alpine仓库中称为)。

FROM alpine:3.7

WORKDIR /usr/src/app

COPY requirements.txt .

RUN \
 apk add --no-cache python3 postgresql-libs && \
 apk add --no-cache --virtual .build-deps gcc python3-dev musl-dev postgresql-dev && \
 python3 -m pip install -r requirements.txt --no-cache-dir && \
 apk --purge del .build-deps

COPY . .

CMD ["python3", "app.py"]


 类似资料:
  • 我正在学习如何将Postgres与Python结合使用(sqlalchemy)。安装时我卡住了。我有以下错误: 我知道这是一个非常常见的错误,对此已经有很多答案,但我找不到任何帮助我解决问题的方法。 我特别不明白这个答案: 将Postgres的路径添加到您的文件夹中。通过附加以下内容创建配置文件: 这是什么意思?我该怎么办? 我还试图在我的终端中输入,但什么也没发生。 谢谢!

  • 我已经安装了PostgreSQL。我想我需要在windows上安装libpq-dev来解决这个问题,但是如何安装呢? 命令pythonsetup.pyegg_info的完整输出:运行egg_info创建pip-eg-info\psycopg2_binary.egg-info写入pip-eg-info\psycopg2_binary.egg-info\PKG-INFO写入dependency_lin

  • 问题内容: 我在安装psycopg2时遇到问题。我尝试执行以下操作时收到以下错误pip install psycopg2: 但是问题出在我身上PATH; 它运行没有任何问题: 我尝试将径添加到文件中,并使用从其网站(http://initd.org/psycopg/)下载的源文件进行构建,然后收到以下错误消息! 但实际上是那里!!! 这些错误使我感到困惑。有人可以帮忙吗? 顺便说一下,我sudo所

  • 我在安装Psycopg2时遇到了麻烦。尝试时出现以下错误: 但问题是实际上在我的中;它运行起来没有任何问题: 我对这些错误感到困惑。有人能帮忙吗? 顺便说一下,我所有命令。我也在RHEL 5.5上。

  • 我奔跑 我得到了一组输出,看起来像: 最后它说: 运行easy_install或从源代码处安装都会在最后给我带来相同的错误(关于-lssl找不到库的部分)。 运行brew安装(或升级)openssl会产生以下结果 有人能帮我吗?

  • 我正在尝试使用以下dockerfile安装: 我得到的错误与和()有关。它以: /tmp/easy_install-nvj61e/numpy-1.11.1/setup.py:327:userwarning:无法识别的setuptools命令,继续生成Cython源并展开模板