Django报snp.routing模块ASGI_APPLICATION导入错误修复方法
Django集成Channels报ASGI模块导入错误排查修复
问题相关配置
settings.py中ASGI配置项:
ASGI_APPLICATION = 'snp.routing.application'
snp目录下routing.py文件代码:
from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter import chat.routing application = ProtocolTypeRouter ({ 'websocket': AuthMiddlewareStack( URLRouter ( chat.routing.websocket_urlpatterns ) ) })
启动时抛出异常:
raise ImproperlyConfigured("Cannot import ASGI_APPLICATION module %r" % path) django.core.exceptions.ImproperlyConfigured: Cannot import ASGI_APPLICATION module 'snp.routing'
排查修复步骤
按以下优先级逐层排查即可解决问题:
- 检查Python包结构合法性
首先确认snp目录、chat目录下都存在空的__init__.py文件,缺少该文件Python会将目录识别为普通文件夹,无法作为模块导入。同时确认启动服务的终端工作目录是manage.py所在的项目根目录,工作目录不对会导致Python解释器搜索不到对应模块。 - 核对依赖版本兼容性
执行pip list | grep -E "Django|channels"查看已安装版本:Django 3.0及以上版本必须搭配Channels 3.0及以上版本,Channels 2.x版本和高版本Django的ASGI接口不兼容,会触发导入错误,版本不匹配时卸载重装对应兼容版本即可。 - 定位导入链路的原始错误
Django抛出的ImproperlyConfigured是包装后的通用提示,真实错误出现在模块导入的链路中:在项目根目录打开Python交互环境,直接执行import snp.routing,会打印出完整的原始错误栈,常见的错误点包括:- chat app未添加到settings.py的
INSTALLED_APPS列表中 - chat目录下的routing.py文件不存在,或文件内未定义
websocket_urlpatterns变量 - 任意层级的routing.py文件存在语法错误、缩进错误、引用了不存在的视图/消费者类
- chat app未添加到settings.py的
- 检查配置拼写准确性
核对ASGI_APPLICATION配置的路径拼写:确认模块名snp、文件名routing、application变量名没有拼写错误,注意大小写完全匹配,不要出现把routing写成routings、route这类笔误。 - 核对服务启动命令
使用daphne/uvicorn启动ASGI服务时,启动参数要指向正确的application对象,比如标准启动命令为daphne snp.asgi:application,不要写错路径参数。
内容的提问来源于stack exchange,提问作者samson negash
相关产品推荐
相关产品推荐

