Obecnie zaktualizowałem już wersję Django z 2.0.6
do 3.0
i nagle po wywołaniu python manage.py shell
polecenia dostałem następujący błąd:
ImportError: nie można zaimportować nazwy „six” z „django.utils” (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/ init .py)
Pełny ślad:
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
Podobne pytania:
Przeczytałem to Pytanie i django-3.0 , informację o wersji , ale te zasoby nie mogły mi pomóc.
django
python-3.x
upgrade
django-3.0
Mohammad Masoumi
źródło
źródło
corsheaders
który nadal korzysta z modułu, który został usunięty.from django.utils import six
Jeśli masz je w kodzie, a następnie systematycznie podbijaj wersje wszystkich pakietów,requirements.txt
które na to narzekają. W moim przypadku musiałem też uderzyćdjango-nested-admin
idjangorestframework
.Odpowiedzi:
Informacje o wersji Django 3.0.0 podają, że niektóre prywatne interfejsy API kompatybilne z Python 2 zostały usunięte . Wśród nich był
django.utils.six
.W przypadku tego błędu konkretnie @WillemVanOnsem zauważył, że moduł
corsheaders
odwołuje się do tego modułu.W przypadku innych osób spotykających się z tą samą rzeczą patrzenie na ścieżkę pliku w ostatnim wierszu stacktrace może pomóc w identyfikacji problematycznego modułu. Innym przykładem tego, co widziałem, jest:
Moduł powodujący problem w tym przypadku to
parler
. Mam nadzieję, że pomoże to wszystkim, którzy napotkają ten problem.źródło
Dlaczego ten błąd / wyjątek?
Od Django 3.0 Release Notes ,
znaczy,
django.utils.six
moduł został usunięty z Django 3,0 roku .Moja baza kodów nie używa
django.utils.six
modułu „ ”, więc dlaczego ten błąd?Ten błąd importu może zostać zgłoszony z dwóch powodów:
django.utils.six
modułudjango.utils.six
modułuUWAGA: W większości przypadków pierwszym powodem jest czarny charakter 😖😖
Jak mogę ustalić, który pakiet powoduje błąd / wyjątek?
Najprostszym sposobem jest przejrzeć kilka ostatnich linii śledzenia błędów , a dowiesz się, który pakiet powoduje wyjątki.
Przykłady
Przykład 1
W tym przykładzie
corsheaders
moduł spowodował błąd importuPrzykład 2
W tym przykładzie
jsonfield
moduł spowodował błąd importuPrzykład 3
W tym przykładzie
parler
moduł spowodował błąd importuPrzykład 4
W tym przykładzie
django_mysql
moduł spowodował błąd importuJakie jest rozwiązanie?
Jeśli błąd podniesiony z powodu niektórych opakowaniach zewnętrznych, takich jak
django-cors-headers
,django-jsonfield
itp uaktualnić odpowiednie wersje pakietów do najnowszych wersji .Jeśli błąd wystąpił z powodu bazy kodu, użyj sześciu pakietów zamiast
django.utils.six
modułuźródło
Jak wspomniano Mohammad Masoumi, aktualizacja pakietów rozwiąże problem, ponieważ
corsheaders
obsługuje teraz Django 3.0.Zaktualizowałem również
djangorestframework
idrf_yasg
aby uniknąć tego ImportError.źródło
Musisz zaktualizować pakiet nagłówków cors:
źródło
Najpierw zainstaluj sześć z pip
Po drugie, w settings.py
Po trzecie, zadzwoń pod sześć
Dla mnie działa, mam Django 3.0.4
źródło
Istnieje wiele bibliotek i dodatków do Django, które używają django.utils.six, które oczywiście są teraz uszkodzone. Głównym problemem jest mysql-connector-python (8.0.18). Prostym rozwiązaniem jest użycie biblioteki zewnętrznej w stosunku do Django, ale autorzy tych bibliotek będą musieli dokonać ich zmian (lub możesz tymczasowo wprowadzić zmiany samodzielnie ... zastąp django.utils.six sześcioma).
źródło
Miałem ten sam problem.
Mój problem polegał na użyciu:
Rozwiązałem to, gdy:
ponieważ to jest najnowsza wersja.
źródło
Wyjątek:
Rozwiązanie:
Zmiana:
Do:
źródło
Idealnym rozwiązaniem dla ludzi jest ulepszenie i czyste użytkowanie, ale obejście dla osób w trudnych warunkach jest dość proste.
W
Django
utils utwórz nowy plik six.py, a w pliku umieść:UWAGA: Nie rozwiązanie, ale obejście umożliwiające natychmiastowe załatanie
źródło
Rozwiązanie JSONField :
Użyłem
jsonfield
ijsonfiled2
paczek. Ale w obu przypadkach napotkałem ten sam błąd.Mój problem został rozwiązany, gdy zainstalowałem
django-jsonfield
pakiet i odinstalowałem resztę pakietów (związanych z jsonfield).Zastosowanie :
źródło
lepiej użyć tego polecenia, jeśli używasz django 3
według tego
https://docs.djangoproject.com/en/3.0/releases/3.0/#removed-private-python-2-compatibility-apis
źródło