ModuleNotFoundError: Нет модуля с именем 'channels.http'

Я нашел пару похожих вопросов, но ничего действительно не помогло. Я попробовал обновить версию asgiref, а также обновил channels и django-eventstream. В основном я следовал инструкции со страницы django-eventstream-setup.

релевантные пакеты из моей установки:

Package            Version
------------------ ---------
asgiref            3.6.0
channels           4.0.0
Django             4.1.2
django-eventstream 4.5.1
django-grip        3.2.0
django-htmx        1.12.2
gripcontrol        4.1.0
huey               2.4.3
MarkupSafe         2.1.2
requests           2.28.1
Werkzeug           2.2.2

Ошибка, которую я получаю при выполнении python manage.py runserver:

...
File "...\venv\lib\site-packages\django_eventstream\routing.py", line 2, in <module>
    from . import consumers
File "...\venv\lib\site-packages\django_eventstream\consumers.py", line 7, in <module>
    from channels.http import AsgiRequest
ModuleNotFoundError: No module named 'channels.http'

Я создал файл asgi.py рядом с settings.py:

import os
from django.core.asgi import get_asgi_application
from django.urls import path, re_path
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
import django_eventstream

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'channels_test.settings')

application = ProtocolTypeRouter({
    'http': URLRouter([
        path("events/", AuthMiddlewareStack(URLRouter(django_eventstream.routing.urlpatterns)), { 'channels': ['test'] }),
        re_path(r"", get_asgi_application()),
    ]),
})

В setup.py я обновил для использования asgi:

WSGI_APPLICATION = "channels_test.wsgi.application"
ASGI_APPLICATION = "channels_test.asgi.application"

Вот структура папок:

enter image description here

Используйте каналы версии 3.0.5! Авторы django-eventstream не обновили собственную документацию)

вам следует изменить версию ваших каналов на 3.0.5, эта версия совместима с django-eventstream==4.5.1.

Вернуться на верх