В настоящее время я уже обновил версию 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 .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
Похожие вопросы:
Я прочитал этот Вопрос и django-3.0 , заметку о выпуске , но эти ресурсы не могли мне помочь.
django
python-3.x
upgrade
django-3.0
Мохаммад Масуми
источник
источник
corsheaders
который все еще использует модуль, который был удален.from django.utils import six
если они есть в вашем коде, а затем систематически поднимайте версии всех пакетов в этом,requirements.txt
которые жалуются на это. В моем случае я должен был также поднятьdjango-nested-admin
иdjangorestframework
.Ответы:
В примечаниях к выпуску Django 3.0.0 указано, что некоторые частные API совместимости с Python 2 были удалены . Среди тех, кто был
django.utils.six
.Для этой ошибки, в частности, @WillemVanOnsem отметил, что модуль
corsheaders
ссылался на этот модуль.Для других, сталкивающихся с тем же самым, просмотр пути к файлу в последней строке трассировки стека может помочь в идентификации проблемного модуля. Другой пример этого я видел:
Модуль, вызывающий проблему в этом случае, был
parler
. Надеюсь, что это поможет всем, кто сталкивается с этой проблемой.источник
Почему эта ошибка / исключение?
Из заметок о выпуске django-3.0 ,
значит,
django.utils.six
модуль был удален из django-3.0 и далее .Моя кодовая база не использует
django.utils.six
модуль " ", тогда почему эта ошибка?Эта ошибка импорта может быть вызвана по двум причинам:
django.utils.six
модульdjango.utils.six
модуляПРИМЕЧАНИЕ: в большинстве случаев первой причиной является злодей 😖😖
Как я могу определить, какой пакет вызывает ошибку / исключение?
Самый простой способ, просмотреть последние несколько строк трассировки ошибок , и она скажет вам, какой пакет вызывает исключения.
Примеры
Пример-1
В этом примере
corsheaders
модуль вызвал ошибку импортаПример-2
В этом примере
jsonfield
модуль вызвал ошибку импортаПример-3
В этом примере
parler
модуль вызвал ошибку импортаПример-4
В этом примере
django_mysql
модуль вызвал ошибку импортаКаково решение?
Если ошибка возникла из-за некоторых сторонних пакетов, таких как
django-cors-headers
,django-jsonfield
и т. Д., Обновите соответствующие версии пакетов до последних версий .Если ошибка возникла из-за вашей кодовой базы, используйте шесть пакетов вместо
django.utils.six
модуляисточник
Как отметил Мохаммад Масуми, обновление пакетов решит проблему, потому что
corsheaders
теперь поддерживает Django 3.0.Я также обновил
djangorestframework
и,drf_yasg
чтобы избежать этого ImportError.источник
Вам необходимо обновить пакет заголовков cors:
источник
Во-первых, установите шесть из пипса
Во-вторых, в settings.py
В-третьих, позвоните шесть
У меня работает, у меня Django 3.0.4
источник
Существует ряд библиотек и надстроек для Django, которые используют django.utils.six, которые теперь, конечно, не работают. Основной проблемой является mysql-connector-python (8.0.18). Простое решение состоит в том, чтобы использовать библиотеку, внешнюю по отношению к Django, но авторам этих библиотек нужно будет внести свои изменения (или вы можете временно внести изменения самостоятельно ... замените django.utils.six на шесть).
источник
У меня такая же проблема.
Моя проблема использовала:
Я решил это, когда я сделал:
потому что это последняя версия.
источник
Исключение:
Решение:
Изменить:
Для того, чтобы:
источник
Идеальным решением для людей является обновление и чистое использование, но обходной путь для людей, находящихся в тяжелом положении, достаточно прост.
В
Django
утилитах создайте новый файл six.py и внутри файла поместите:ПРИМЕЧАНИЕ. Не решение, а обходной путь для немедленного исправления
источник
Решение JSONField :
Я использовал
jsonfield
иjsonfiled2
пакеты. Но в обоих случаях я столкнулся с одной и той же ошибкой.Моя проблема решена, когда я установил
django-jsonfield
пакет и удалил остальные пакеты (связанные с jsonfield).Использование :
источник
Вам лучше запустить эту команду, если вы используете Django 3
согласно этому
https://docs.djangoproject.com/en/3.0/releases/3.0/#removed-private-python-2-compatibility-apis
источник