【问题标题】:psycopg2 installation for python:2.7-alpine in Dockerpython:2.7-alpine 在 Docker 中的 psycopg2 安装
【发布时间】:2017-05-25 07:15:41
【问题描述】:

要在 python 中使用 PostgreSql,我需要

pip install psycopg2   

但是,它依赖于 libpq-dev 和 python-dev。我想知道如何在 alpine 中安装依赖项?谢谢。

这是一个 Dockerfile:

FROM python:2.7-alpine

RUN apk add python-dev libpq-dev
RUN pip install psycopg2

输出是:

步骤 3 : RUN apk add python-dev libpq-dev ---> 运行 3223b1bf7cde 警告:忽略 APKINDEX.167438ca.tar.gz:没有这样的文件 或目录警告:忽略 APKINDEX.a2e6dac0.tar.gz:没有这样的文件 或目录错误:无法满足的约束:libpq-dev(缺失): 要求:world[libpq-dev] python-dev(缺少): 要求:世界 [python-dev] 错误:服务“服务”未能构建:命令“/bin/sh -c apk add python-dev libpq-dev”返回 非零代码:2

【问题讨论】:

    标签: python postgresql python-2.7 docker alpine


    【解决方案1】:

    如果您只需要在基于python:2.7-alpine 的 Docker 映像上安装适用于 python 2.7 的 psycopg2,那么以下 Dockerfile 代码将非常适合您:

    FROM python:2.7-alpine
    
    RUN apk update && \
        apk add --virtual build-deps gcc python-dev musl-dev && \
        apk add postgresql-dev
    
    RUN pip install psycopg2
    

    【讨论】:

      【解决方案2】:

      编译/安装psycopg2前的说明

      • libpqclient library for PostgreSQL
      • postgresql-dev 是带有源头文件的包,用于在编译中链接库/二进制文件中的 libpq,在这种情况下,当 pip 编译 psycopg 时。

      我在alpine 3.7中使用如下配置,我加了一些cmets来解释一下。

      # Installing client libraries and any other package you need
      RUN apk update && apk add libpq
      
      # Installing build dependencies
      # For python3 you need to add python3-dev *please upvote the comment
      # of @its30 below if you use this*
      RUN apk add --virtual .build-deps gcc python-dev musl-dev postgresql-dev
      
      # Installing and build python module
      RUN pip install psycopg2
      
      # Delete build dependencies
      RUN apk del .build-deps
      

      【讨论】:

      • 我认为这是一个有效的解决方案。 psycopg2 需要 psotgresql-libs,而后者又需要 libpq 作为 RUNTIME(动态链接)依赖项。
      • 对于 python3,我必须将 python3-dev 添加到我的依赖项中
      【解决方案3】:

      在 Docker 中的 Alpine Linux 下运行 Python 3.7 和 PostgreSQL 时遇到问题。 这篇文章帮助了https://www.rockyourcode.com/install-psycopg2-binary-with-docker/

      主要是在你的需求文件中引用psypcopg2-binary并安装以下包(在Dockerfile中):

      RUN apk update && \
      apk add --no-cache --virtual build-deps gcc python3-dev musl-dev && \
      apk add postgresql-dev
      

      【讨论】:

        【解决方案4】:

        我无法从python:2.7.13-alpine 安装它。结束了这个:

        FROM gliderlabs/alpine:3.3
        
        RUN apk add --no-cache --update \
            python \
            python-dev \
            py-pip \
            build-base
        
        RUN apk add --virtual build-deps gcc python-dev musl-dev && \
            apk add --no-cache --update postgresql-dev && \
            pip install psycopg2==2.7.1
        

        【讨论】:

          【解决方案5】:

          好像你需要的包是libpq而不是libpq-dev

          https://pkgs.alpinelinux.org/package/edge/main/x86/py2-psycopg2

          看看右边的依赖关系

          【讨论】:

          • 我只尝试安装 lnstall libpq,但没有成功。
          • 感谢您的回答;它看起来像 libpq 不是解决方案。这是 docker 响应的一部分:“第 3 步:运行 apk add libpq ---> Running in 04206f15a8f7 WARNING: Ignoring APKINDEX.167438ca.tar.gz: No such file or directory WARNING: Ignoring APKINDEX.a2e6dac0.tar.gz :没有这样的文件或目录错误:无法满足的约束:libpq(缺少):需要:world [libpq]“
          • 我以安装系统包结束并将其从 requirements.txt 中删除
          【解决方案6】:

          在 dockerfile 中添加

          RUN apk update && apk add --no-cache --virtual .build-deps\
              postgresql-dev gcc libpq  python3-dev musl-dev linux-headers\ 
              && pip install --no-cache-dir -r requirements.txt\
              && apk del .build-deps\
              && rm -rf /var/cache/apk/*
          

          【讨论】:

            【解决方案7】:

            帮助我的是:

            RUN apk add --no-cache python3 \
            && python3 -m ensurepip \
            && pip3 install --upgrade pip setuptools \
            && apk add build-base \
            && apk add gcc musl-dev libffi-dev openssl-dev python3-dev \
            && apk add postgresql-dev \
            && rm -r /usr/lib/python*/ensurepip && \
            if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
            if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
            rm -r /root/.cache
            
            RUN pip install --trusted-host pypi.python.org psycopg2
            

            尤其是apk add gcc musl-dev libffi-dev openssl-dev python3-dev,如Docker: Installing python cryptography on alpine linux distribution中所示

            【讨论】:

              猜你喜欢
              • 2017-07-14
              • 1970-01-01
              • 2019-07-20
              • 1970-01-01
              • 2019-10-19
              • 2020-01-07
              • 2016-01-30
              • 2016-11-28
              • 2020-08-19
              相关资源
              最近更新 更多