Нет модуля с именем 'corsheaders' docker-compose up
Привет всем! Я новичок в мире Django. Я разрабатываю Django сайт и хочу сделать Docker контейнер с приложением и запустить его на моем localhost. Я создал свой Dockerfile и docker-compose.yaml, но когда я запускаю
docker-compose up
он выдает следующую ошибку.
Присоединение к mysite-web-1 mysite-web-1 | Наблюдение за изменениями файлов с помощью StatReloader mysite-web-1 | Исключение в потоке django-main-thread: mysite-web-1 | Traceback (последний последний вызов): mysite-web-1 | File "/usr/local/lib/python3.10/threading.py", line 1009, in _bootstrap_inner mysite-web-1 | self.run() mysite-web-1 | Файл "/usr/local/lib/python3.10/threading.py", строка 946, in run mysite-web-1 | self._target(*self._args, **self._kwargs) mysite-web-1 | Файл "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", строка 64, в wrapper mysite-web-1 | fn(*args, **kwargs) mysite-web-1 | Файл "/usr/local/lib/python3.10/site-packages/django/core/management/commands/runserver.py", строка 115, in inner_run mysite-web-1 | autoreload.raise_last_exception() mysite-web-1 | File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 87, in raise_last_exception mysite-web-1 | raise _exception[1] mysite-web-1 | File "/usr/local/lib/python3.10/site-packages/django/core/management/init.py", line 381, in execute mysite-web-1 | autoreload.check_errors(django.setup)() mysite-web-1 | Файл "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", строка 64, в wrapper mysite-web-1 | fn(*args, **kwargs) mysite-web-1 | Файл "/usr/local/lib/python3.10/site-packages/django/init.py", строка 24, в setup mysite-web-1 | apps.populate(settings.INSTALLED_APPS) mysite-web-1 | Файл "/usr/local/lib/python3.10/site-packages/django/apps/registry.py", строка 91, in populate mysite-web-1 | app_config = AppConfig.create(entry) mysite-web-1 | Файл "/usr/local/lib/python3.10/site-packages/django/apps/config.py", строка 223, in create mysite-web-1 | import_module(entry) mysite-web-1 | Файл "/usr/local/lib/python3.10/importlib/init.py", строка 126, в import_module mysite-web-1 | return _bootstrap._gcd_import(name[level:], package, level) mysite-web-1 | Файл "", строка 1050, в _gcd_import mysite-web-1 | Файл "", строка 1027, в _find_and_load mysite-web-1 | Файл "", строка 1004, в _find_and_load_unlocked mysite-web-1 | ModuleNotFoundError: Нет модуля с именем 'corsheaders'
Я прочитал все темы и не нашел решения.
Вот мой Dockerfile:
FROM python:3
# Sets an environmental variable that ensures output from python is sent straight to the terminal without buffering it first
ENV PYTHONUNBUFFERED 1
# Sets the container's working directory to /app
WORKDIR /app
# Copies all files from our local project into the container
ADD . /app
# runs the pip install command for all packages listed in the requirements.txt file
RUN pip install -r requirements.txt
Мой файл docker-compose.yaml:
services:
web:
build: .
command: python manage.py runserver localhost:8000
ports:
- 8000:8000
Requirements.txt:
asgiref==3.4.1
crispy-bootstrap5==0.6
Django==4.0.1
django-crispy-forms==1.14.0
docopt==0.6.2
Jinja2==3.0.3
jinja2-time==0.2.0
make==0.1.6.post2
MarkupSafe==2.0.1
py-make==0.1.1
python-dateutil==2.8.2
six==1.16.0
sqlparse==0.4.2
tzdata==2021.5
И мой settings.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Homepage',
'contact',
"crispy_forms",
"crispy_bootstrap5",
'corsheaders',
]
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
CRISPY_TEMPLATE_PACK = "bootstrap5"
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware'
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Я попытался установить django-cors-headers, но он уже установлен, и когда я запускаю pip list, он выдает следующее:
asgiref 3.5.0
Django 4.0.2
django-cors-headers 3.11.0
sqlparse 0.4.2
tzdata 2021.5
Вы, вероятно, должны добавить django-cors-headers в ваш файл requirements.txt:
django-cors-headers==3.11.0
и восстановить с помощью
docker-compose up --build.
Помните, что среда python внутри вашего контейнера Docker отделена от вашей локальной среды, поэтому любые требования к вашему проекту должны быть переданы на этапе сборки, в данном случае через файл requirements.txt.