Невозможно импортировать модуль ASGI_APPLICATION, когда сервер запуска использует каналы 2

Я следил за учебным пособием по каналам, но при запуске этих ошибок

Версия пакетов: channels==2.1.2 Django==2.0.4

что я пропустил? в settings.py

INSTALLED_APPS = [
   "channels"
    ....
]

ROOT_URLCONF = 'myapp.urls'
ASGI_APPLICATION = "myapp.routing.application"

добавлен файл mayapp/routing.py

from channels.routing import ProtocolTypeRouter 

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})

это журнал ошибок

System check identified no issues (0 silenced).
August 01, 2018 - 13:11:42
Django version 2.0.4, using settings 'myapp.local_settings'
Starting ASGI/Channels version 2.1.2 development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f71ecfb6400>
Traceback (most recent call last):
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/routing.py", line 33, in get_default_application
    module = importlib.import_module(path)
  File "/home/vkchlt0192/myapp/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'myapp.routing'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/management/commands/runserver.py", line 80, in inner_run
    application=self.get_application(options),
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/management/commands/runserver.py", line 105, in get_application
    return StaticFilesWrapper(get_default_application())
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/routing.py", line 35, in get_default_application
    raise ImproperlyConfigured("Cannot import ASGI_APPLICATION module %r" % path)
django.core.exceptions.ImproperlyConfigured: Cannot import ASGI_APPLICATION module 'myapp.routing'

person Shihabudheen K M    schedule 01.08.2018    source источник
comment
Вы получили решение?   -  person a_k_v    schedule 23.10.2018
comment
теперь у меня работает, я использую каналы == 2.1.5   -  person Shihabudheen K M    schedule 23.10.2018
comment
мой случай был проблемой синтаксиса, такой как from channels.routine, который должен быть from channels.routing. и получил аналогичную ошибку, когда py manage.py runserver   -  person BingLi224    schedule 25.04.2019


Ответы (14)


В моем случае это был неправильный импорт в другой файл.

Что вы должны сделать, это

python manage.py shell
from mysite.routing import application

Посмотрите, какую именно ошибку он выдает, и попытайтесь исправить ее.

person Voilin    schedule 15.08.2020

Просто измените

ASGI_APPLICATION = mysite.routing.application

to

ASGI_APPLICATION = "routing.application"

person Shersha Fn    schedule 19.11.2018
comment
Не знаю почему, но это решило проблему. - person cristian; 17.07.2020
comment
Разобрался: проблема была в том, что у меня был файл routing.py в mysite/, а не в mysite/mysite/. Добавив его туда, теперь я могу использовать: ASGI_APPLICATION = mysite.routing.application в файле настроек. - person cristian; 17.07.2020

Проверьте возможные ошибки (возможно, ошибку импорта) в Consumers.py. Кроме того, попробуйте поставить каналы первым элементом INSTALLED_APPS в settings.py.

Как указано в документе каналов:

Сервер разработки Channels будет конфликтовать с любыми другими сторонними приложениями, которым требуется перегруженная или замещающая команда runserver. Пример такого конфликта — с whitenoise.runserver_nostatic от whitenoise. Чтобы решить такие проблемы, попробуйте переместить каналы в верхнюю часть списка INSTALLED_APPS или вообще удалить проблемное приложение.

person Bharat Rajani    schedule 01.01.2019
comment
это было решением! Приведенное выше сообщение об ошибке маскирует любые синтаксические ошибки, возникающие в этом файле. Очень неудобно - person David Schumann; 11.03.2020

Вам нужно поместить файл routing.py внутрь mayapp/mayapp/routing.py вместо mayapp/routing.py

person wint3rmute    schedule 14.10.2018
comment
Не могли бы Вы уточнить. Файл фактически находится внутри корневого каталога проекта. Кажется, правильный путь к файлу! - person a_k_v; 23.10.2018
comment
он находится на корневом пути проекта, теперь он работает у меня после обновления версии канала до каналов == 2.1.5 - person Shihabudheen K M; 23.10.2018
comment
@ShihabudheenKM Можете ли вы рассказать свои каналы, версии django и asgiref? - person Kamran Hosseini; 10.10.2019

На случай, если кто-нибудь придет сюда. Помните: ASGI_APPLICATION = "myapp.routing.application" должен располагаться в нижней части файла settings.py, чтобы ничего не зацепило в рабочей среде!

мой сайт/мое приложение/routing.py

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})

мое приложение/routing.py

from django.urls import path
from . import consumers

websocket_urlpatterns = [
    path('chatroompage', consumers.ChatConsumer),
]
person Jay    schedule 15.10.2019

в моем случае в Consumer.py были неразрешенные пакеты, проверьте, есть ли у вас неразрешенные пакеты в ваших файлах .py каналов.

person Mawardy    schedule 22.03.2019
comment
у меня была та же проблема, если есть какая-либо ошибка в строке asgi, она показывает эту ошибку - person SeriForte; 17.01.2021

Я также столкнулся с той же проблемой.
Убедитесь, что:
=> Файл routing.py должен находиться в корневой папке проекта (например, на сервере django, на котором есть settings.py, wsgi.py,..)
=> В settings.py укажите ASGI_APPLICATION = "yourprojectrootname.routing.application"

=> Иногда кодировка внутри файла routing.py может генерировать эту ошибку, чтобы проверить, так ли это, удалите всю кодировку и введите общую кодировку шаблона,

from channels.routing import ProtocolTypeRouter

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})

затем запустите «сервер запуска python manage.py». На этот раз, если вы не получили никакой ошибки, проблема заключается в кодировании внутри routing.py. Отладьте и устраните проблему.

=> В других случаях это может быть связано с версией, даунгрейд на каналы == 2.1.2 работает

person Jerome    schedule 16.03.2020

У меня также была такая же проблема, я сделал все, чтобы решить ее, создав еще одну виртуальную среду и установив более старую версию Django, но после 2 дней аппаратного обеспечения я понял, что мой файл Consumers.py отсутствует только с «s» в потребительском ' и после этого я также исправил в своем файле routing.py. Возможно, это может быть вашей проблемой, также сначала проверьте имена всех файлов.

person Engineering Projects    schedule 26.09.2019

Я решил свою проблему:

  • python manage.py миграция
  • миграция python manage.py
  • python manage.py миграция

Также проверьте, не поместили ли вы файл routing.py в неправильный каталог. Это должен быть 'myproject/routing.py'.

person Ritik Jain    schedule 19.01.2020
comment
Вы должны поместить routing.py внутрь mysite/mysite/, а не mysite/. - person cristian; 17.07.2020

Я недавно столкнулся с этой проблемой и быстро решил ее. Проверив конфигурации в settings.py и routing.py, я обнаружил, что проблема в этой строке:

from channels.auth import AuthMiddlewareStack

проблема в совместимости версий. Затем я обновил requirements.txt до приведенного ниже, и он работает тихо и хорошо.

channels==2.4.0
channels-redis==2.4.2
daphne==2.5.0
person Hosein Basafa    schedule 14.05.2020

При импорте вашего приложения с абсолютным путем в myapp/routing убедитесь, что оно импортировано следующим образом:

импортировать myapp.routing

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})

Это может дать вам предупреждение об ошибке в PyCharm, но у вас будут рабочие каналы Django. Я сообщил об этом как об ошибке в PyCharm. Надеюсь, никто больше не будет тратить на это 3-4 часа, как я)

person Ergash Masharipov    schedule 22.06.2020

Вы должны поместить routing.py внутри mysite/mysite/, а не mysite/, иначе вы не сможете использовать ASGI_APPLICATION = mysite.routing.application в файле настроек, и вы получите эту ошибку.

person cristian    schedule 17.07.2020

Это помогло мне: все с ASGI_APPLICATION было хорошо (спасибо всем предыдущим ответам, данным здесь). Но я почитал логи чуть дальше и оказалось, что где-то еще была ошибка импорта:

ImportError: cannot import name 'channel_session_user_from_http' from 'channels.auth'

Как только я избавился от него, все вернулось на круги своя.

person Lev Slinsen    schedule 01.03.2021

Изменение определения переменной ASGI_APPLICATION и переменной CHANNEL_LAYERS.default.ROUTING из

<project_name>.routing.application

to

routing.application

С этим я могу нормально бегать

person Ahmet Onur Solmaz    schedule 02.04.2021