Zur Zeit habe ich bereits die Version von Django ein Upgrade von 2.0.6
auf 3.0
und plötzlich nach dem Aufruf python manage.py shell
Befehl bekam diese Fehlermeldung:
ImportError: Der Name 'six' kann nicht aus 'django.utils' importiert werden (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/ init .py).
Vollständige Spur:
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
Ähnliche Fragen:
Ich lese diese Frage und django-3.0 , Release-Info , aber diese Ressourcen können mir nicht helfen.
django
python-3.x
upgrade
django-3.0
Mohammad Masoumi
quelle
quelle
corsheaders
, das noch ein Modul verwendet, das entfernt wurde.from django.utils import six
wenn Sie sie in Ihrem Code haben, und stoßen Sie dann systematisch die Versionen aller Pakete anrequirements.txt
, die sich darüber beschweren. In meinem Fall musste ich auch stoßendjango-nested-admin
unddjangorestframework
.Antworten:
In den Versionshinweisen zu Django 3.0.0 wird angegeben, dass bestimmte private Python 2-Kompatibilitäts-APIs entfernt wurden . Unter diesen war
django.utils.six
.Für diesen Fehler hat @WillemVanOnsem speziell festgestellt, dass das Modul
corsheaders
auf dieses Modul verweist.Für andere, die auf dasselbe Problem stoßen, kann das Betrachten des Dateipfads in der letzten Zeile des Stacktraces bei der Identifizierung des problematischen Moduls hilfreich sein. Ein anderes Beispiel dafür, das ich gesehen habe, ist:
Das Modul, das das Problem in diesem Fall verursacht hat, war
parler
. Hoffe, dies hilft allen anderen, die auf dieses Problem stoßen.quelle
Warum dieser Fehler / diese Ausnahme?
Von django-3.0 Release Notes ,
bedeutet, dass das
django.utils.six
Modul ab Django-3.0 entfernt wurde .Meine Codebasis verwendet kein "
django.utils.six
" Modul. Warum dann dieser Fehler?Dieser Importfehler kann aus zwei Gründen auftreten:
django.utils.six
Modul verwendendjango.utils.six
ModulHINWEIS: Meistens ist der erste Grund der Bösewicht 😖😖
Wie kann ich feststellen, welches Paket den Fehler / die Ausnahme verursacht?
Der einfache Weg ist, in die letzten Zeilen des Fehler-Tracebacks zu schauen und zu erfahren , welches Paket die Ausnahmen verursacht.
Beispiele
Beispiel 1
In diesem Beispiel hat das
corsheaders
Modul den Importfehler verursachtBeispiel-2
In diesem Beispiel hat das
jsonfield
Modul den Importfehler verursachtBeispiel-3
In diesem Beispiel hat das
parler
Modul den Importfehler verursachtBeispiel-4
In diesem Beispiel hat das
django_mysql
Modul den Importfehler verursachtWas ist die Lösung?
Wenn der Fehler ausgelöst , weil einige Pakete von Drittanbietern wie
django-cors-headers
,django-jsonfield
usw. aktualisieren die entsprechenden Paketversionen zu aktuellen Versionen .Wenn der Fehler aufgrund Ihrer Codebasis aufgetreten ist, verwenden Sie sechs Pakete anstelle des
django.utils.six
Modulsquelle
Wie von Mohammad Masoumi erwähnt, wird das Problem durch ein Upgrade der Pakete behoben, da
corsheaders
Django 3.0 jetzt unterstützt wird.Ich habe auch aufgerüstet
djangorestframework
unddrf_yasg
diesen Import zu vermeiden.quelle
Sie müssen das cors-Header-Paket aktualisieren:
quelle
Installieren Sie zuerst sechs von pip
Zweitens in settings.py
Drittens rufen Sie sechs
Für mich funktioniert, ich habe Django 3.0.4
quelle
Es gibt eine Reihe von Bibliotheken und Add-Ons zu Django, die django.utils.six verwenden, die jetzt natürlich kaputt sind. Das Hauptproblem ist mysql-connector-python (8.0.18). Die einfache Lösung besteht darin, die Bibliothek außerhalb von Django zu verwenden. Die Autoren dieser Bibliotheken müssen jedoch ihre Änderungen vornehmen (oder Sie können die Änderungen vorübergehend selbst vornehmen. Ersetzen Sie django.utils.six durch sechs).
quelle
Ich hatte das gleiche Problem.
Mein Problem war:
Ich habe das gelöst, als ich es tat:
denn das ist die neueste Version.
quelle
Ausnahme:
Lösung:
Veränderung:
Zu:
quelle
Die ideale Lösung für Leute ist ein Upgrade und eine saubere Nutzung, aber eine Problemumgehung für Leute in Not ist einfach genug.
In
Django
utils erstellen Sie eine neue Datei six.py und setzen Sie in die Datei:HINWEIS: Keine Lösung, sondern eine Problemumgehung für sofortiges Patchen
quelle
JSONField-Lösung :
Ich habe
jsonfield
undjsonfiled2
Pakete verwendet. In beiden Fällen hatte ich jedoch den gleichen Fehler.Mein Problem wurde behoben, wenn ich das
django-jsonfield
Paket installiert und den Rest der Pakete deinstalliert habe (im Zusammenhang mit jsonfield).Verwendung :
quelle
Führen Sie diesen Befehl besser aus, wenn Sie Django 3 verwenden
demzufolge
https://docs.djangoproject.com/de/3.0/releases/3.0/#removed-private-python-2-compatibility-apis
quelle