ImportError: cannot import name 'python_2_unicode_compatible' from 'django.utils.encoding' in building docker

Я новичок в изучении docker и django. Я попытался докеризировать существующий проект django для добавления базы данных MySQL и команды "runserver". После изменения файла requirements.txt для устранения конфликта зависимостей мой контейнер "runserver" запускается, но я не могу увидеть приложение на локальном компьютере. Вот мой трассировочный бэкграунд:

Вот мои Dockerfile и docker-compose.yml:

FROM python:3.11

WORKDIR /app

COPY requirements.txt /app

RUN pip install -r requirements.txt 

COPY . /app

EXPOSE 8000

CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]

services:
  db:
    container_name: ***
    image: mysql:latest
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
      interval: 10s
      timeout: 3s
      retries: 3
    restart: always
    environment:
      MYSQL_DATABASE: ***
      MYSQL_USER: ***
      MYSQL_PASSWORD: ***
      MYSQL_ROOT_PASSWORD: ***
    ports:
      - "3306:3306"

  runserver:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    working_dir: /app
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_NAME: ***
      DB_USER: ***
      DB_PASSWORD: ***

После отслеживания ошибки я думаю, что вы используете Python 3:11, и importError возникает в корне папки вашего проекта, site-packages/django/utils/encoding.py. Причиной этой ошибки является в том, что текущая версия Django несовместима с существующим проектом Django, который вы пытаетесь докеризировать и который использует версию 2 серии Django. Эти два проекта не могут работать, что и приводит к ошибке.

Вы можете решить эту проблему следующим образом:

Рассмотрите возможность понижения версии Django на вашем requirements.txt до Django 2.2, которая использует API совместимости с Python 2, выполнив команду pip; pip install django==2.2.

ИЛИ

Вы можете настроить свой код, указав точный путь к ошибке выше, импортировав код ниже на верхнем уровне модуля, encoding.py. Чтобы приведенный ниже код работал, убедитесь, что пакет six python установлен, а если нет, то установите его; pip install six, а когда закончите, запустите ваш pip freeze > requirements.txt.


 from six import python_2_unicode_compatible

Вернуться на верх