如何解决ImportError: cannot import name 'AsyncWebsocketConsumer'错误?
解决Channels 2中
ImportError: cannot import name 'AsyncWebsocketConsumer'的问题 我之前踩过类似的坑,结合你的使用环境和代码帮你梳理下解决步骤:
你当前用的是Python 3.6 + Django 1.11 + Channels 2,教程第2部分正常但第3部分修改代码后触发了导入错误,主要问题集中在这几个方面:
1. 修复导入语句的语法错误
你的Consumer.py第一行代码有语法问题,把两个import写在了同一行,这会导致Python解析出错,间接引发导入相关的报错:
# 错误写法 from channels.generic.websocket import AsyncWebsocketConsumer import json # 正确写法,拆分为两行 from channels.generic.websocket import AsyncWebsocketConsumer import json
2. 确认Channels版本兼容性
Django 1.11对Channels 2的版本有一定限制,建议安装适配的稳定版本(比如2.1.7,这是经过验证能和Django 1.11良好配合的版本):
pip install channels==2.1.7
可以先执行pip show channels查看当前版本,如果版本过低或过高,都可能导致类路径找不到的问题。
3. 提前修复后续会出现的方法错误
另外注意,你的代码里使用了group_discard方法,但在Channels 2中这个方法并不存在,正确的离开群组方法是group_remove,否则后续运行还会报错,建议提前修改:
# 错误写法 await self.channel_layer.group_discard( self.room_group_name, self.channel_name ) # 正确写法 await self.channel_layer.group_remove( self.room_group_name, self.channel_name )
按照这几步调整后,应该就能解决当前的导入错误,同时避免后续的运行问题。
内容的提问来源于stack exchange,提问作者Haroon Ahmed
相关产品推荐
相关产品推荐

