Django rest Error - AttributeError: модуль 'collections' не имеет атрибута 'MutableMapping'
Я создаю приложение Django, и оно прекрасно работает на моей машине, но когда я запускаю его в контейнере docker, фреймворк rest продолжает падать, но когда я комментирую любое соединение с фреймворком rest, он работает нормально.
- Моя машина: Kali Linux 2021.3
- Докерная машина: Raspberry Pi 4 4gb .
- образ контейнера докера: python:rc-alpine3.14
- версия python на моей машине: Python 3.9.7 .
- версия python на контейнере: Python 3.10.0rc2 .
вывод ошибки:
Dockerfile
FROM python:rc-alpine3.14
COPY . /app
WORKDIR /app
ENV UWSGI_PROFILE=core
ENV PYTHONUNBUFFERED=TRUE
RUN apk add --update --no-cache g++ gcc libxslt-dev # add some nessery libs
RUN apk add python3-dev build-base linux-headers pcre-dev
RUN pip3 install -U pip # upgrade pip
RUN apk update \
&& apk add --virtual build-deps gcc python3-dev musl-dev \
&& apk add jpeg-dev zlib-dev libjpeg \
&& pip install Pillow \
&& apk del build-deps
RUN apk add --no-cache --virtual=build-dependencies wget ca-certificates && \
wget "https://bootstrap.pypa.io/get-pip.py" -O /dev/stdout | python
RUN pip install uwsgi
RUN pip3 install -r requirements.txt # install all requirements
RUN python uploadstatics.py
EXPOSE 80
CMD ["gunicorn","project.wsgi:application", "-b 0.0.0.0:8060"]
ПРИМЕЧАНИЯ:
- Я использую gunicorn для запуска приложения (ошибка появляется даже при запуске не из manage.py)
Либо вы можете понизить версию вашего python. Это должно решить вашу проблему, если нет, то используйте collections.abc.Mapping вместо устаревшего collections.Mapping.
Обратитесь сюда: Ссылка
В вашем файле docker вы установили образ python:rc-alpine3.14
, который использует python 3.10. Учитывая, что 3.10 вышла совсем недавно, многие пакеты еще не обновлены, и в зависимости от ограничений на версии, которые вы имеете в вашем requirements.txt
, это также может привести к несовместимости версий. Проблема здесь в том, что Django Rest framework использует пакет requests, который использует collections.MutableMapping
, если я напишу это в python 3.9, я получу следующее предупреждение, которое говорит, что это будет удалено в 3.10, следовательно, вы должны понизить версию до python 3.9:
Warning (from warnings module):
File "<pyshell#1>", line 1
DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working
Другое дело, что писать python:rc-alpine3.14
в качестве изображения - это просто напрашиваться на то, чтобы ваш код сломался! Указывайте конкретную стабильную и выпущенную версию, а не релиз-кандидат rc
:
FROM python:3.9.7-alpine3.14
...