无法在新的 docker 容器上安装 psycopg2-binary

问题描述 投票:0回答:7

我在尝试在新的 Docker 容器上运行 django 项目时遇到了问题。 这是我第一次使用 Docker,我似乎找不到在其上运行 django 项目的好方法。尝试了多个教程后,我总是收到有关 psycopg2 未安装的错误。

需求.txt:

-i https://pypi.org/simple
asgiref==3.2.7
django-cors-headers==3.3.0
django==3.0.7
djangorestframework==3.11.0
gunicorn==20.0.4
psycopg2-binary==2.8.5
pytz==2020.1
sqlparse==0.3.1

Dockerfile:

# pull official base image
FROM python:3.8.3-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip

COPY ./requirements.txt .
RUN pip install -r requirements.txt

# copy project
COPY . .

# set project environment variables
# grab these via Python's os.environ
# these are 100% optional here

ENV PORT=8000
ENV SECRET_KEY_TWITTER = "***"

运行 docker-compose build 时,出现以下错误:

Error: pg_config executable not found.

pg_config is required to build psycopg2 from source. 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'.

If you prefer to avoid building psycopg2 from source, please install the PyPI

'psycopg2-binary' package instead.

我很乐意回答任何可能导致解决方案的问题。 另外,也许有人可以推荐我一个关于 dockerizing django 应用程序的好教程?

python django docker psycopg2
7个回答
63
投票

我成功了。这是代码:

FROM python:3.8.3-slim #Image python:3.9.5-slim also works # Image python:3.9.5-slim-buster also works

RUN apt-get update \
    && apt-get -y install libpq-dev gcc \
    && pip install psycopg2
    

21
投票

在 Alpine Linux 上,即使 PyPI 上有预编译的二进制轮,您也需要编译所有包。在标准的基于 Linux 的镜像上,你不会(https://pythonspeed.com/articles/alpine-docker-python/ - 我在那里写的其他文章可能会有所帮助,例如关于安全性) .

因此,将您的基本图像更改为

python:3.8.3-slim-buster
python:3.8-slim-buster
,它应该可以工作。


9
投票

此脚本适用于 MacBook Air M1

Dockerfile

FROM ubuntu:20.04
RUN apt-get update && apt-get -y install libpq-dev gcc && pip install psycopg2
COPY requirements.txt /cs_account/
RUN pip3 install -r requirements.txt

需求.txt

psycopg2-binary~=2.8.6

Zoltán Buzás 的答案更新了答案


4
投票

这对我有用。尝试苗条克星形象。

在你的

Dockerfile

FROM python:3.8.7-slim-buster

并在您的

requirements.txt
文件中

psycopg2-binary~= <<version_number>>

1
投票

我将其添加到最佳答案中,因为我收到了如下所示的其他错误:

gcc: error trying to exec 'cc1plus': execvp: No such file or directory
error: command 'gcc' failed with exit status 1

src/pyodbc.h:56:10: fatal error: sql.h: No such file or directory
#include <sql.h>

这就是我解决这个问题的方法,所以我不确定其他人是如何让它发挥作用的,但也许这是我正在做的其他一些事情?

我在谷歌搜索这两个错误时从其他帖子中找到的解决方案:

FROM python:3.8.3-slim 

RUN apt-get update \
&& apt-get -y install g++ libpq-dev gcc unixodbc unixodbc-dev

0
投票

我用

制作了自定义图像
FROM python:alpine
ADD requirements.txt /
RUN apk update --no-cache \
&& apk add build-base postgresql-dev libpq --no-cache --virtual .build-deps \
&& pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir -r /requirements.txt \
&& apk del .build-deps
RUN apk add postgresql-libs libpq --no-cache

和要求.txt

django
djangorestframework
psycopg2-binary

0
投票

对于可能遇到此问题的其他人 - (我知道 OP 没有此问题),但可能是您正在尝试安装

psycopg2
而不是
psycopg2-binary
,这是我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.