Saat ini, saya telah memutakhirkan versi Django dari 2.0.6
ke 3.0
dan tiba-tiba setelah memanggil python manage.py shell
perintah mendapat kesalahan ini:
ImportError: tidak dapat mengimpor nama 'enam' dari 'django.utils' (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/ init .py)
Jejak lengkap:
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
Pertanyaan serupa:
Saya membaca Pertanyaan ini dan Django-3.0 , catatan rilis , tetapi sumber daya itu tidak bisa membantu saya.
django
python-3.x
upgrade
django-3.0
Mohammad Masoumi
sumber
sumber
corsheaders
yang masih menggunakan modul yang telah dihapus.from django.utils import six
jika Anda memilikinya di kode Anda, dan kemudian secara sistematis menabrak versi semua paketrequirements.txt
yang mengeluh tentang hal ini. Dalam kasus saya, saya juga harus menabrakdjango-nested-admin
dandjangorestframework
.Jawaban:
Catatan rilis Django 3.0.0 menetapkan bahwa API kompatibilitas Python 2 pribadi tertentu telah dihapus . Di antara mereka adalah
django.utils.six
.Untuk kesalahan ini secara khusus @WillemVanOnsem mencatat bahwa modul
corsheaders
itu merujuk modul ini.Bagi yang lain mengalami hal yang sama, melihat jalur file pada baris terakhir stacktrace dapat membantu mengidentifikasi modul yang bermasalah. Contoh lain dari ini yang pernah saya lihat adalah:
Modul yang menyebabkan masalah dalam kasus ini adalah
parler
. Semoga ini bisa membantu orang lain yang mengalami masalah ini.sumber
Mengapa ini kesalahan / pengecualian?
Dari catatan rilis django-3.0 ,
berarti,
django.utils.six
modul telah dihapus dari Django-3.0 dan seterusnya .Basis kode saya tidak menggunakan
django.utils.six
modul " ", lalu mengapa kesalahan ini?Kesalahan impor ini dapat dinaikkan karena dua alasan,
django.utils.six
moduldjango.utils.six
modulCATATAN: Sebagian besar alasan pertama adalah penjahat 😖😖
Bagaimana saya bisa mengidentifikasi paket mana yang menyebabkan kesalahan / pengecualian?
Cara mudah adalah, lihat beberapa baris terakhir traceback kesalahan Anda , dan itu akan memberi tahu Anda paket mana yang menyebabkan pengecualian.
Contohnya
Contoh 1
Dalam contoh ini,
corsheaders
modul menyebabkan kesalahan imporContoh-2
Dalam contoh ini,
jsonfield
modul menyebabkan kesalahan imporContoh-3
Dalam contoh
parler
modul ini menyebabkan kesalahan imporContoh-4
Dalam contoh
django_mysql
modul ini menyebabkan kesalahan imporApa solusinya?
Jika kesalahan dibangkitkan karena beberapa paket pihak ketiga seperti
django-cors-headers
,django-jsonfield
, dll meng-upgrade paket versi sesuai dengan versi terbaru .Jika kesalahan muncul karena dari basis kode Anda, gunakan enam paket bukan
django.utils.six
modulsumber
Seperti yang disebutkan oleh Mohammad Masoumi, meningkatkan paket akan menyelesaikan masalah karena
corsheaders
mendukung Django 3.0 sekarang.Saya juga memutakhirkan
djangorestframework
dandrf_yasg
untuk menghindari ImportError ini.sumber
Anda perlu memperbarui paket header kor:
sumber
Pertama, instal enam dari pip
Kedua, di settings.py
Ketiga, telepon enam
Bagi saya bekerja, saya punya Django 3.0.4
sumber
Ada sejumlah perpustakaan dan tambahan untuk Django yang menggunakan django.utils.six, yang tentu saja sekarang rusak. Yang utama yang menjadi perhatian adalah mysql-connector-python (8.0.18). Solusi sederhananya adalah dengan menggunakan pustaka eksternal untuk Django, tetapi penulis pustaka-pustaka ini perlu membuat perubahan mereka (atau Anda dapat membuat sendiri sementara perubahan .... gantikan django.utils.six dengan enam).
sumber
Saya memiliki masalah yang sama.
Masalah saya menggunakan:
Saya menyelesaikan ini ketika saya melakukannya:
karena itu adalah versi terbaru.
sumber
Pengecualian:
Larutan:
Perubahan:
Untuk:
sumber
Solusi ideal orang-orang adalah peningkatan dan penggunaan yang bersih, tetapi solusi untuk orang-orang dalam kesulitan cukup sederhana.
Dalam
Django
utils, buat file baru six.py dan di dalam file tersebut:CATATAN: Bukan solusi tetapi solusi untuk penambalan segera
sumber
Solusi JSONField :
Saya menggunakan
jsonfield
danjsonfiled2
paket. Namun dalam kedua kasus, saya menghadapi kesalahan yang sama.Masalah saya terpecahkan ketika saya telah menginstal
django-jsonfield
paket dan menghapus semua paket lainnya (terkait dengan jsonfield).Penggunaan :
sumber
Anda lebih baik menjalankan perintah ini jika Anda menggunakan Django 3
Menurut Ini
https://docs.djangoproject.com/en/3.0/releases/3.0/#removed-private-python-2-compatibility-apis
sumber