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