SyntaxError: 生成器表达式必须用括号括起来 / python manage.py migrate
Posted
技术标签:
【中文标题】SyntaxError: 生成器表达式必须用括号括起来 / python manage.py migrate【英文标题】:SyntaxError: Generator expression must be parenthezised / python manage.py migrate 【发布时间】:2018-07-27 02:45:20 【问题描述】:我真的是编程新手,我想学习 Djangogirls 教程,但我现在卡住了。 教程中我是here:
要为我们的博客创建数据库,让我们在控制台中运行以下命令:python manage.py migrate(我们需要在包含 manage.py 文件的 djangogirls 目录中)。如果一切顺利,您应该会看到如下内容:...
教程中没有失败的选项,但我有一条错误消息:
(myvenv) C:\Users\Julcsi\djangogirls> python manage.py migrate
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\Julcsi\djangogirls\myvenv\lib\site-packages\django\core\management\__init__.py",
line 364, in execute_from_command_line
utility.execute()
File "C:\Users\Julcsi\djangogirls\myvenv\lib\site-packages\django\core\management\__init__.py",
line 338, in execute
django.setup()
File "C:\Users\Julcsi\djangogirls\myvenv\lib\site-packages\django\__init__.py",
line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\Julcsi\djangogirls\myvenv\lib\site-packages\django\apps\registry.py",
line 85, in populate
app_config = AppConfig.create(entry)
File "C:\Users\Julcsi\djangogirls\myvenv\lib\site-packages\django\apps\config.py",
line 94, in create
module = import_module(entry)
File "C:\Users\Julcsi\AppData\Local\Programs\Python\Python37\lib\importlib\__init__.py",
line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 723, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_remove
File "C:\Users\Julcsi\djangogirls\myvenv\lib\site-packages\django\contrib\admin\__init__.py",
line 4, in <module>
from django.contrib.admin.filters import (
File "C:\Users\Julcsi\djangogirls\myvenv\lib\site-packages\django\contrib\admin\filters.py",
line 10, in <module>
from django.contrib.admin.options import IncorrectLookupParameters
File "C:\Users\Julcsi\djangogirls\myvenv\lib\site-packages\django\contrib\admin\options.py",
line 12, in <module>
from django.contrib.admin import helpers, widgets
File "C:\Users\Julcsi\djangogirls\myvenv\lib\site-packages\django\contrib\admin\widgets.py",
line 152
'%s=%s' % (k, v) for k, v in params.items(),
SyntaxError: Generator expression must be parenthesized
我做错了什么?我该怎么办?
我有 Python 3.7.0b1
非常感谢您的帮助:)
【问题讨论】:
你真的不应该使用未发布的 Python 版本。坚持 3.6。 感谢您的回复! :) 不幸的是,在我卸载 Python 3.7.0b1 之后,当我尝试在命令行中“询问”版本是否处于活动状态时,它仍然是 3.7。 :( 我在 Python 3.6 上遇到了同样的错误 Python 3.7 发布 这能回答你的问题吗? SyntaxError: Generator expression must be parenthesized 【参考方案1】:你没有做错什么;这是 Django 和 Python 3.7 之间的问题。 Django has a fix,但该修复尚未进入新版本。
您可以同时安装 Python 的稳定版本 Python 3.6。
【讨论】:
非常感谢您的回答!! :) 我试图卸载 3.7 但在命令行中,我仍然看到 Python 3.7 作为使用的版本......我不明白为什么。我卸载了 Python 3.7。使用“python-3.7.0b1-amd64.exe”+卸载按钮。我在我的文件中看不到它。我做错了什么? 哦,对不起,现在我意识到问题只发生在“myvenv”虚拟环境中(在我输入“myvenv\Scripts\activate”之后) 非常感谢!不,我没有意识到我应该删除 venv 并重新创建它......所以你的评论救了我:D 现在它可以工作了!再次感谢! 根据github.com/django/django/commit/931c60c#commitcomment-30238549,这将永远无法修复。 Django 1.11 LTS 和 Python 3.7+ 将不兼容。 @hyperknot:教程一直在更新——现在安装了 2.0.x——所以它已经修复了。【参考方案2】:这是 Django 和 Python 3.7 之间的 a known incompatibility。已将修复程序合并到 Django 2.x branches 并向后移植到 1.11 branch。
要解决这个问题,只需将 Django 更新到至少版本 1.11.17 (or 2.x) 或者您可以将 Python 降级到版本 3.6。
【讨论】:
解决了我遇到的问题!【参考方案3】:另外,升级 Django 解决了我的问题
在你的终端上,
$ pip install -U Django
或查看here
【讨论】:
解决了我的问题。谢谢。 降级Python也是一种解决方案。【参考方案4】:Python 3.7 仅支持 Django==2.2,因此升级您的 Django 版本将解决您的问题
pip3 install django --upgrade
【讨论】:
【参考方案5】:Django Girls tutorial version in English 具有 just switched to Django 2.0,这应该使其与 Python 3.7 兼容。 (Django 2.0 包含a backport 中提到的Ry-'s answer 修复。)
所以现在开始本教程的每个人都应该可以使用 Python 3.7。
如果您已经开始学习本教程,则必须从 Django installation 章节重新开始。您需要在新目录中执行此操作(删除或重命名您当前的 djangogirls
目录或为新目录选择不同的名称)作为生成的文件
django-admin print startproject mysite .
取决于使用的 Django 版本。
【讨论】:
Translations of the tutorial to other languages 可能需要一些时间来跟上这一变化。如果您想提供帮助,请参阅 here。【参考方案6】:根据Django's FAQ,Django 1.11.x 与 Python 3.7 不兼容。
Django 1.11.x 于 2017 年 12 月 2 日到达 end of mainstream support,在其生命周期结束之前,它只会收到数据丢失和安全修复。
【讨论】:
【参考方案7】:正如所有上述答案已经表明 Django 和 Python 版本之间存在匹配错误。 创建虚拟环境时,请运行以下命令
python3.6 -m venv myenv
它会在创建您的虚拟环境时使用 Python3.6。 现在您可以在这个虚拟环境中安装所有依赖项了。
【讨论】:
【参考方案8】:我通过将 Django 升级到 Dajngo==1.11.29(Dajngo 1.11 的最后一个版本)解决了这个问题。我认为我的 python 版本是 3.8.x。如果您不打算升级到 Django 2.x 或 3.x,请尝试一下
【讨论】:
【参考方案9】:请按照以下步骤解决问题:
移动到安装virtualenv
的目录
您将找到一个名为 lib 的目录。在该目录中,您将找到一个名为 pythonx.y 的目录,其中 x.y 是您正在使用的 python 版本
现在,去site-packages
然后进入目录django
移动到contrib
目录
现在,转到admin
目录。在这里你可以找到一个 python 文件widgets.py
在该文件中找到以下代码 sn-p
if params:
related_url += '?' + '&'.join(
related_url += '?' + '&'.join('%s=%s' % (k, v) for k, v in params.items())
'%s=%s' % (k, v) for k, v in params.items(),
)
您需要将其更改为以下内容
if params:
related_url += '?' + '&'.join(
related_url += '?' + '&'.join('%s=%s' % (k, v) for k, v in params.items())
保存更改并再次执行迁移。
【讨论】:
更改第三方库的源代码不是一个好主意。最好升级到支持python版本的Django版本以上是关于SyntaxError: 生成器表达式必须用括号括起来 / python manage.py migrate的主要内容,如果未能解决你的问题,请参考以下文章
C# Regex.Split,如何将字符串拆分为用括号括起来而不是用括号括起来?