Daphne ModuleNotFoundError: модуль не назван

Я не могу запустить сервер Daphne. Всегда вылетает со следующей ошибкой:

 Traceback (most recent call last):
   File "/usr/local/bin/daphne", line 8, in <module>
     sys.exit(CommandLineInterface.entrypoint())
   File "/usr/local/lib/python3.8/site-packages/daphne/cli.py", line 171, in entrypoint
     cls().run(sys.argv[1:])
   File "/usr/local/lib/python3.8/site-packages/daphne/cli.py", line 233, in run
     application = import_by_path(args.application)
   File "/usr/local/lib/python3.8/site-packages/daphne/utils.py", line 12, in import_by_path
     target = importlib.import_module(module_path)
   File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
     return _bootstrap._gcd_import(name[level:], package, level)
   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
   File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
   File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
 ModuleNotFoundError: No module named 'apps'

/дома/прассел/приложения/asgi.py

django_asgi_app = get_asgi_application()

application = ProtocolTypeRouter(
    {
        "http": django_asgi_app,
        "websocket": URLRouter([path('ws/notifications/', NotificationConsumer.as_asgi())]),
    }
)

Я запускаю Daphne следующим образом из /home/prassel/docker-compose.yml

  daphne:
    platform: linux/amd64
    build:
      context: .
      dockerfile: Dockerfile.daphne
    command: 'sh -c "daphne -b 0.0.0.0 -p 8000  apps.asgi:application"'
    restart: always
    working_dir: /home/prassel

Dockerfile.daphne

FROM python:3.8-buster

ENV PYTHONUNBUFFERED 1

ARG REQUIREMENTS_FILE

WORKDIR /home/prassel/

RUN pip install daphne

У вас есть __init__.py файл в apps папке?

NixonSparrow 05.04.2023 10:22

Да, у меня есть. Это содержимое default_app_config = "apps.trainingtelemetry.apps.TrainingTelemetryConfig" Есть и другие папки.

Neo 05.04.2023 11:06

Можете ли вы опубликовать полный тэйсбэк? (вывод перед ошибкой)

Igonato 05.04.2023 11:55

Пожалуйста, отредактируйте свой вопрос вместо этого. Комментарии SO имеют ограниченную поддержку форматирования

Igonato 05.04.2023 12:08

Я обновил описание с полной трассировкой

Neo 05.04.2023 12:09

Вы уверены, что запускаете команду daphne -b 0.0.0.0 -p 8000 apps.asgi:application из папки проекта? (/home/prassel/sml-266/simlai-api/)

Igonato 05.04.2023 12:11

Я обновил описание того, как я запускаю Дафну.

Neo 05.04.2023 12:15

Если мой ответ не помог, пожалуйста, опубликуйте содержимое вашего Dockerfile.daphne

Igonato 05.04.2023 12:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
8
137
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ОБНОВЛЕНИЕ: вы не добавляете файлы проекта в свой контейнер Docker во время сборки, поэтому в вашем контейнере нечего запускать. Вам нужно добавить их с помощью команды COPY или ADD.

Это одна из основ Docker. Вы должны немного прочитать о том, что такое контейнеры Docker и как они работают, или вы можете использовать официальный пример или следовать одному из бесчисленных Учебники по Django + Docker доступны в Интернете.


Я считаю, что проблема заключается в вашей настройке Docker. Убедитесь, что вы установили WORKDIR в Dockerfile.daphne и working_dir: в docker-compose.yml одно и то же значение, и все будет хорошо.

Dockerfile:

FROM ...

WORKDIR /yourproject

COPY ...

RUN ...

...

...

docker-compose.yml:

  daphne:
    platform: linux/amd64
    build:
      context: .
      dockerfile: Dockerfile.daphne
    command: 'sh -c "daphne -b 0.0.0.0 -p 8000  apps.asgi:application"'
    restart: always
    working_dir: /yourproject

@SelvaPrasad, можете ли вы добавить свой файл Dockerfile к вопросу. Или загрузить репозиторий минимального воспроизведения на GitHub? На данный момент все должно действительно работать. Кроме того, убедитесь, что вы используете docker compose build после внесения изменений в Dockerfiles.

Igonato 05.04.2023 12:44

Я добавил содержимое Dockerfile. Я запущу сборку docker compose

Neo 05.04.2023 12:47

Не могли бы вы сказать мне, правильно ли я использую имя модуля? Какое имя асги мне нужно передать Дафне? Правильно ли указано имя apps.asgi:application? Я подозреваю, что я смешиваю это там.

Neo 05.04.2023 12:56

@SelvaPrasad обновил мой ответ. Имя вашего модуля верное. Ваш Dockerfile действительно отключен. Вам нужно прочитать о Docker или попробовать работать без него и добавить его позже, когда он вам понадобится.

Igonato 05.04.2023 12:57

Другие вопросы по теме