当前,我已经将Django的版本从 2.0.6
升级到了 3.0
,并且在调用python manage.py shell
命令后突然此错误:
ImportError:无法从“ django.utils”(/ path-to-project / project / venv / lib / python3.7 / site-packages / django / utils / init 中导入名称“ six” > .py)
完整跟踪:
Traceback (most recent call last):
File "manage.py", line 13, in <module>
execute_from_command_line(sys.argv)
File "/path-to-project/project/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/path-to-project/project/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 377, in execute
django.setup()
File "/path-to-project/project/venv/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/path-to-project/project/venv/lib/python3.7/site-packages/django/apps/registry.py", line 91, in populate
app_config = AppConfig.create(entry)
File "/path-to-project/project/venv/lib/python3.7/site-packages/django/apps/config.py", line 90, in create
module = import_module(entry)
File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/path-to-project/project/venv/lib/python3.7/site-packages/corsheaders/__init__.py", line 1, in <module>
from .checks import check_settings # noqa: F401
File "/path-to-project/project/venv/lib/python3.7/site-packages/corsheaders/checks.py", line 7, in <module>
from django.utils import six
类似问题:
我读了Question和django-3.0,release note,但是这些资源对我没有帮助。
答案 0 :(得分:16)
首先,从pip安装六个
append()
第二,打六个
A
对我来说,我有Django 3.0.4
答案 1 :(得分:14)
安装此库:django-utils-six
2.0 for Django> 3。
pip install django-utils-six
答案 2 :(得分:12)
Django 3.0.0发行说明指定某些private Python 2 compatibility APIs were removed。其中有django.utils.six
。
对于此错误,@ WillemVanOnsem特别指出模块corsheaders
在引用此模块。
对于遇到相同问题的其他人,查看stacktrace的最后一行上的文件路径可以帮助识别有问题的模块。我见过的另一个例子是:
...
File "/path/to/project/venv/lib/python3.8/site-packages/parler/utils/conf.py", line 10, in <module>
from django.utils import six
ImportError: cannot import name 'six' from 'django.utils' (/path/to/project/venv/lib/python3.8/site-packages/django/utils/__init__.py)
在这种情况下,导致问题的模块是parler
。希望这对遇到此问题的其他人有所帮助。
答案 3 :(得分:9)
例外:
File "/usr/local/lib/python3.8/dist-packages/django/core/management/__init__.py", line 377, in execute
django.setup()
File "/usr/local/lib/python3.8/dist-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python3.8/dist-packages/django/apps/registry.py", line 114, in populate
app_config.import_models()
File "/usr/local/lib/python3.8/dist-packages/django/apps/config.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/usr/local/lib/python3.8/dist-packages/django_celery_beat/models.py", line 6, in <module>
import timezone_field
File "/usr/local/lib/python3.8/dist-packages/timezone_field/__init__.py", line 1, in <module>
from timezone_field.fields import TimeZoneField
File "/usr/local/lib/python3.8/dist-packages/timezone_field/fields.py", line 5, in <module>
from django.utils import six
ImportError: cannot import name 'six' from 'django.utils' (/usr/local/lib/python3.8/dist-packages/django/utils/__init__.py)
解决方案:
vi /usr/local/lib/python3.8/dist-packages/timezone_field/fields.py
更改:
from django.utils import six
收件人:
import six
答案 4 :(得分:9)
您需要更新cors标头包:
pip3 install six
pip3 install --upgrade django-cors-headers
答案 5 :(得分:7)
django.utils.six
-删除此供应商库的使用或切换到six。
意味着, django.utils.six
模块已从 django-3.0起删除。
django.utils.six
”模块,为什么会出现此错误?此导入错误可能是由于两个原因引起的,
django.utils.six
模块 django.utils.six
模块的代码库注意:大多数情况下,第一个原因是小人??
简单的方法是,查看您的错误跟踪的最后几行,它会告诉您是哪个程序包导致了异常。
在此示例中,corsheaders
模块导致导入错误
File "/path-to-project/project/venv/lib/python3.7/site-packages/corsheaders/__init__.py", line 1, in
from .checks import check_settings # noqa: F401
File "/path-to-project/project/venv/lib/python3.7/site-packages/corsheaders/checks.py", line 7, in
from django.utils import six
在此示例中,jsonfield
模块导致导入错误
File "d:\production\myproject\venv\lib\site-packages\jsonfield\fields.py", line 21, in
from .encoder import JSONEncoder
File "d:\production\myproject\venv\lib\site-packages\jsonfield\encoder.py", line 2, in
from django.utils import six, timezone
ImportError: cannot import name 'six' from 'django.utils' (d:\production\myproject\venv\lib\site-packages\django\utils\__init__.py)
在此示例中,parler
模块导致导入错误
...
File "/path/to/project/venv/lib/python3.8/site-packages/parler/utils/conf.py", line 10, in
from django.utils import six
ImportError: cannot import name 'six' from 'django.utils' (/path/to/project/venv/lib/python3.8/site-packages/django/utils/__init__.py)
在此示例中,django_mysql
模块导致导入错误
File "/home/jerin/.virtualenvs/webscraperio/lib/python3.6/site-packages/django_mysql/checks.py", line 9, in
from django_mysql.utils import collapse_spaces
File "/home/jerin/.virtualenvs/webscraperio/lib/python3.6/site-packages/django_mysql/utils.py", line 17, in
from django.utils import six
ImportError: cannot import name 'six'
如果由于django-cors-headers
,django-jsonfield
等某些第三方程序包而引起错误,则将相应的程序包版本升级到最新版本。
如果由于您的代码库而引发错误,请使用six软件包而不是 django.utils.six
模块
答案 6 :(得分:5)
答案 7 :(得分:4)
有许多使用django.utils.six的Django库和附加组件,它们现在当然已经损坏了。关注的主要问题之一是mysql-connector-python(8.0.18)。一种简单的解决方案是使用Django外部的库,但是这些库的作者将需要进行更改(或者您可以暂时进行更改。...用6代替django.utils.six)。
答案 8 :(得分:4)
Folks的理想解决方案是升级和简洁的用法,但是对处于困境的人们来说,解决方法很简单。
在Django
实用程序中创建一个新文件six.py,并在文件内部放置:
import six
注意:不是解决方案,而是一种立即修补的解决方法
答案 9 :(得分:3)
JSONField解决方案:
我使用了jsonfield
和jsonfiled2
软件包。但是在两种情况下,我都遇到相同的错误。
我安装了django-jsonfield
软件包并卸载了其余的软件包(与jsonfield相关)后,问题解决了。
# In case you have installed the following packages, otherwise ignore them.
pip uninstall jsonfield
pip uninstall jsonfield2
pip install django-jsonfield
用法:
from django.db import models
from jsonfield import JSONField
class ModelName(models.Model):
json_field = JSONField()
答案 10 :(得分:1)
pip安装六个
导入 “来自六个导入python_2_unicode_compatible”
运行python manage.py makemigrations和python manage.py migration
我还删除了urllib3和chardet
答案 11 :(得分:1)
只需更改它!
导入六个,它肯定会修复。
答案 12 :(得分:1)
如Mohammad Masoumi所述,升级软件包将解决此问题,因为corsheaders
现在支持Django 3.0。
pip install --upgrade django-cors-headers
我还升级了djangorestframework
和drf_yasg
以避免此ImportError。
答案 13 :(得分:1)
我有完全相同的问题。让我告诉你我是如何解决的(幸运的是,这样做很简单)。
您必须注意Django告诉您的回溯(<提示>专业提示:从底部开始):
File "/path-to-project/project/venv/lib/python3.7/site-packages/corsheaders/checks.py", line 7, in <module>
from django.utils import six
ImportError: cannot import name 'six' from 'django.utils' (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/init.py)
它告诉您两个重要的事情:
ImportError: cannot import name 'six' from 'django.utils'
/lib/python3.7/site-packages/corsheaders/checks.py", line 7, in <module>
首先要告诉您它无法从six
导入django.utils
模块,因为Django具有deprecated the module in Django 3.0,这是很合逻辑的。
现在您可能会问:
这个==> /lib/python3.7/site-packages/corsheaders/checks.py
, corsheaders
正在此处将模块导入:from django.utils import six
中的checks.py
(第7行)。 / p>
通常由updating the package解决该问题,该问题首先是造成该问题的原因。他们可能会删除该导入,并在必要时将其替换为其他内容。 转到命令行并输入:
pip install corsheaders -U
Django停止支持Python2。由于django.utils.six
provided“ 用于编写在Python 2和3上运行的代码的实用程序”,因此不再需要支持此模块,因此在Django 3中已弃用。
答案 14 :(得分:0)
答案 15 :(得分:0)
尝试将Disqus集成到我的应用程序时出现错误,只需安装django-six
软件包即可解决。
pip install django-six
答案 16 :(得分:0)
我有同样的问题。我的问题是使用pip install django_taggit==0.22.2
的问题。我解决了当我执行“ pip install django_taggit == 1.2.0”时,因为它是最新版本。
答案 17 :(得分:0)
据我了解,您只需要删除tokens.py
文件
如果您有更高版本的Django。
并同时删除其他文件中的所有导入from .tokens
,例如views.py
。
答案 18 :(得分:0)
Django 6 不适用于高于 django2 的 Django 版本,因此快速修复是通过 pip 安装:
pip install django-utils-six
那你应该可以走了