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 += '?' + '&amp;'.join(
                related_url += '?' + '&amp;'.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 += '?' + '&amp;'.join(
                related_url += '?' + '&amp;'.join('%s=%s' % (k, v) for k, v in params.items())

保存更改并再次执行迁移。

【讨论】:

更改第三方库的源代码不是一个好主意。最好升级到支持python版本的Django版本

以上是关于SyntaxError: 生成器表达式必须用括号括起来 / python manage.py migrate的主要内容,如果未能解决你的问题,请参考以下文章

C# Regex.Split,如何将字符串拆分为用括号括起来而不是用括号括起来?

数组必须用大括号括起来的初始化程序 c++ 初始化

明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064

[转]sizeof计算空间大小的总结

正则表达式查找数字并在段落中用括号括起来

22. 括号生成