Django运行报错No module named 'django.core.asgi'问题排查求助
问题根因
- 你当前安装的Django 2.2.19版本不支持ASGI能力,
django.core.asgi模块是Django 3.0及以上版本才正式内置的功能,所以会直接抛出导入错误 - 你的requirements.txt中Django没有锁定版本,近期重新安装依赖时大概率自动拉取过高版本Django,后续又因为其他操作回退到了2.2.19,版本漂移导致适配高版本Django的ASGI配置无法兼容旧版本
- 你这个项目最初是用Django 3.1.4生成的,默认自带asgi.py配置,settings.py中也配置了
ASGI_APPLICATION参数,这些配置在Django 2.2版本下都无法正常运行
解决方案
方案1:保留Channels WebSocket功能(推荐)
直接升级Django到3.0以上的长期支持版本,同时锁死所有依赖版本避免后续再出现版本漂移问题
- 修改requirements.txt,锁定所有依赖的兼容版本:
Django==3.2.20 google-auth==2.22.0 gunicorn==20.1.0 Channels==3.0.5 Daphne==3.0.2 channels_redis==3.4.1 pyzmq==25.1.1
- 执行命令重新安装依赖:
pip install -r requirements.txt - 启动项目验证即可,原有的ASGI、Channels配置不需要做任何改动
方案2:不需要WebSocket功能
直接移除所有ASGI相关配置即可恢复启动
- 删除项目根目录下的
asgi.py文件 - 删掉settings.py中以下两行相关配置:
ASGI_APPLICATION = 'smartcube_interface.asgi.application' CHANNEL_LAYERS = { 'default': { 'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': { "hosts": [('127.0.0.1', 6379)], }, }, }
- 从INSTALLED_APPS列表里删掉
channels,从requirements.txt里删掉Channels、Daphne、channels_redis三个依赖 - 重启项目即可正常运行
内容的提问来源于stack exchange,提问作者Alexander Wagner
相关产品推荐
相关产品推荐

