【问题标题】:Docker with django issue "no module psycopg2" - but it's installed and in requirements.txt带有 django 的 Docker 问题“没有模块 psycopg2” - 但它已安装并在 requirements.txt 中
【发布时间】:2021-08-06 21:08:12
【问题描述】:

我有一个问题,django_api 有错误“django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'”

psycopg2 已安装 -> 已满足要求:/Users/swestphal/Documents/privateProjects/vue_and_django/ddv/env/lib/python3.9/site-packages (2.8.6) 中的 psycopg2

我的要求.txt

asgiref==3.3.4
Django==3.2.3
django-cors-headers==3.5.0
djangorestframework==3.12.4
psycopg2==2.8.6
psycopg2-binary==2.8.6
PyJWT==1.7.1
pytz==2021.1

这里是我的 Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app

CMD python manage.py runserver 0.0.0.0:8000

这里是我的 docker-compose.yaml

version: '3.8'
services:
  admin_db:
    container_name: django_admin_db
    image: postgres
    restart: always
    environment:
      - POSTGRES_DB=django_admin
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - ./data/admin_db:/var/lib/postgresql/data
    ports:
      - 33066:3306

  admin_api: 
    container_name: django_api
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    ports:
      - '8000:8000'
    depends_on:
      - admin_db

感谢您的帮助!

【问题讨论】:

  • 在将 psycopg2 添加到 requirements.txt 后是否重建了图像?
  • 该错误消息还有更多上下文吗?您的“已安装”验证引用了主机虚拟环境中的路径;如果你docker run admin_api pip freeze是否包含在容器环境中?

标签: django docker django-rest-framework docker-compose


【解决方案1】:

这是 postgresql 的常见问题。你需要的是 linux 开发包。

将此添加到您的 dockerfile 会有所帮助。

RUN apt-get update \
  # dependencies for building Python packages
  && apt-get install -y build-essential \
  # psycopg2 dependencies
  && apt-get install -y libpq-dev

【讨论】:

    【解决方案2】:

    但是您是否将它安装在容器内? 从 requirements.txt 重新安装的命令

     docker exec admin_api pip install -r requirements.txt
    

    在 requirements.txt 中添加一行不会安装包(除非你重建容器)

    您也可以通过安装新软件包来加快速度:

    docker exec admin_api pip install <package name>
    

    【讨论】:

    • 一旦容器退出,您使用docker exec 所做的任何更改都将丢失。您永远不应该使用 docker exec 在容器中安装软件。
    • 不,如果包在 requirements.txt 中,则不会,如果他重建,它将被重新安装。在编码时使用 docker exec 安装软件很好,无论如何,要么就是这样,要么重建容器可能需要很多时间。
    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2020-11-12
    • 2023-01-19
    • 2020-07-29
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多