Derzeit habe ich die Version von Django 2.2 auf 3.0 aktualisiert und bekomme plötzlich Fehler wie unten.
ImportError: Name 'Sechs' kann nicht aus 'django.utils' importiert werden
Ich habe überprüft, Traceback ist wie unten.
Traceback (most recent call last):
File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\ptvsd_launcher.py", line 43, in <module>
main(ptvsdArgs)
File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 432, in main
run()
File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 316, in run_file
runpy.run_path(target, run_name='__main__')
File "C:\Python37\Lib\runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "C:\Python37\Lib\runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "C:\Python37\Lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "D:\production\myproject\erp_project\manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "d:\production\myproject\venv\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
utility.execute()
File "d:\production\myproject\venv\lib\site-packages\django\core\management\__init__.py", line 377, in execute
django.setup()
File "d:\production\myproject\venv\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "d:\production\myproject\venv\lib\site-packages\django\apps\registry.py", line 92, in populate
app_config = AppConfig.create(entry)
File "d:\production\myproject\venv\lib\site-packages\django\apps\config.py", line 90, in create
module = import_module(entry)
File "d:\production\myproject\venv\lib\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 "d:\production\myproject\venv\lib\site-packages\post_office\__init__.py", line 3, in <module>
from .backends import EmailBackend
File "d:\production\myproject\venv\lib\site-packages\post_office\backends.py", line 6, in <module>
from .settings import get_default_priority
File "d:\production\myproject\venv\lib\site-packages\post_office\settings.py", line 101, in <module>
context_field_class = import_attribute(CONTEXT_FIELD_CLASS)
File "d:\production\myproject\venv\lib\site-packages\post_office\compat.py", line 45, in import_attribute
module = importlib.import_module(module_name)
File "d:\production\myproject\venv\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "d:\production\myproject\venv\lib\site-packages\jsonfield\__init__.py", line 1, in <module>
from .fields import JSONField, JSONCharField # noqa
File "d:\production\myproject\venv\lib\site-packages\jsonfield\fields.py", line 21, in <module>
from .encoder import JSONEncoder
File "d:\production\myproject\venv\lib\site-packages\jsonfield\encoder.py", line 2, in <module>
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)
Ich habe im Ordner Lib \ site-packages \ django \ utils eingecheckt und nicht gefunden und six.py-Datei, aber immer noch aus Lib \ site-packages \ jsonfield \ encode.py mit der Zeile aus django.utils import sechs, Zeitzone, die versucht zu importieren sechs aber nicht in der Lage zu finden.
Frühere Version von django mit der Datei six.py im Ordner Lib \ site-packages \ django \ utils.
Irgendeine Idee, wie man das löst?
django
python-3.x
Mond
quelle
quelle
jsonfield
Paket, das ein Modul in Django benötigt, das nicht mehr gefunden werden kann.Antworten:
Kurze Antwort : Vielleicht möchten Sie aufgeben
django-jsonfield
.Basierend auf dem Traceback verwenden Sie das
django-jsonfield
Paket [GitHub] , und dies ist ein bekanntes Problem [GitHub-Problem] . Es hängt vomdjango.utils.six
Modul ab, aber dieses Modul wurde in Django-3.0 entfernt .Im Moment können Sie django-3.0 daher nicht mit django-jsonfield verwenden . Da das letzte Commit für dieses Projekt ab Oktober 2017 erfolgt, ist das Projekt möglicherweise nicht mehr so "aktiv" und kann daher sehr lange dauern (oder sogar nie) repariert werden. Der Nachfolger von django-jsonfield ist jsonfield2 ([GitHub]) . Es wurde durch eine Pull-Anfrage im Oktober (2019) [GitHub-pr] mit Django-3.0 kompatibel gemacht .
quelle
jsonfield2
wurde es archiviert und injsonfield
( GitHub ) zusammengeführt.Um das Sechs-Modul zu verwenden, können Sie es direkt mit pip installieren und dann das django-jsonfield-Paket entsprechend ändern. Ich meine, finde die Dateien in dem Paket, in dem sie sich befinden,
from django.utils import six
und ersetze sie durchimport six
. Dann sollte es funktionieren. Ich hatte das gleiche Problem bei der Verwendung von Djongo mit Django 3.0. Ich habe die entsprechende Datei gefunden und durch den obigen Vorschlag ersetzt. Bitte beachten Sie, dass dies niemals empfohlen wird, wenn Sie an einem Projekt auf Produktions- oder Unternehmensebene arbeiten. Ich habe es für mein Haustierprojekt gemacht.quelle
A in bestimmten Django 3.0 Release-Info ,
django.utils.six
wird entfernt. Falls Sie es brauchen, wird empfohlen, stattdessen Pypi-Pakete zu verwendenIn Ihrem Fall wird das
jsonfield
Paket möglicherweise durch das JSON-Feld von Django ersetzt . Eine andere Lösung wäre, sichjsonfield
selbst zu verpacken, um Ihr Problem zu lösen, oder eine PR für das Repo des Projekts zu erstellen.quelle