创建名为Authentication的Django应用时出现生成器表达式需加括号语法错误
报错原因
核心原因是Django与Python版本不兼容,同时你没有正确激活创建的virtualenv虚拟环境:
- 从报错路径
D:\anaconda\lib\site-packages\django\可以判断,当前执行命令调用的是Anaconda全局环境的Python解释器,根本没用到你建的虚拟环境。 - 全局环境安装的是Django 1.11版本,该版本最高仅支持Python 3.6,你当前所用的Python是3.7及以上版本。Python 3.7调整了生成器表达式的语法规则:非函数唯一入参场景下的生成器表达式必须用括号包裹,Django 1.11的
django/contrib/admin/widgets.py第151行的旧写法不符合新语法要求,因此抛出语法错误。
解决方法
按推荐优先级选择方案即可:
- 方案1(最适配你的学习场景):先正确激活virtualenv虚拟环境,再在虚拟环境内安装适配当前Python版本的Django。
Windows环境激活虚拟环境的操作:- 命令行进入你创建的虚拟环境目录下的
Scripts文件夹 - 执行
activate命令,激活成功后命令行开头会出现带虚拟环境名称的括号前缀 - 执行
pip install django安装最新稳定版Django,之后再运行python manage.py startapp Authentication就不会报错。
- 命令行进入你创建的虚拟环境目录下的
- 方案2:如果必须使用Django 1.11版本,将对应环境的Python版本降级到3.6即可,不要用3.7及以上版本运行该版本Django。
- 方案3:临时修改报错文件,找到
D:\anaconda\lib\site-packages\django\contrib\admin\widgets.py第151行,删掉行尾的多余逗号,同时给生成器表达式外层套上括号。该方案不推荐,Django 1.11和高版本Python的兼容问题不止这一处,修改后大概率会遇到其他报错。
内容的提问来源于stack exchange,提问作者Ratnakar Mishra
相关产品推荐
相关产品推荐

