ImportError: 'django.utils' klasöründen 'six' adı alınamıyor


49

Şu anda, zaten gelen Django sürümünü yükselten 2.0.6etmek 3.0ve aniden çağırdıktan sonra python manage.py shellkomutu bu hata var:

ImportError: 'django.utils' öğesinden 'six' adı içe aktarılamıyor (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/ init .py)

Tam izleme:

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

Benzer Sorular:

Bu Soru ve , sürüm notunu okudum , ama bu kaynaklar bana yardımcı olamadı.


2
corsheadersHala kaldırılmış bir modülü kullanan bir paket kullanıyorsunuz.
Willem Van Onsem

1
@WillemVanOnsem Çok teşekkürler, bunu yükselttiniz.
Mohammad Masoumi

2
@MohammadMasoumi Temel olarak, kodunuzda varmış gibi açık ifadeleri kaldırın from django.utils import sixve ardından requirements.txtbu konuda şikayet eden tüm paketlerin sürümlerini sistematik olarak çarpın . Benim durumumda da çarpmak zorunda kaldım django-nested-adminve djangorestframework.
Raul Laasner

Django 3.0 ile çalışacak şekilde güncellenmemiş bir paket ile çalışıyorsanız, bunu basit bir düzeltme ekiyle düzeltebilirsiniz .
Monica

1
Merhaba Muhammed, Sorununuz çözüldü mü? Doğru çözüm nedir?
Mostafa Ghadimi

Yanıtlar:


29

Django 3.0.0 sürüm notları, bazı özel Python 2 uyumluluk API'lerinin kaldırıldığını belirtir . Bunların arasında django.utils.six.

Bu hata için özellikle @WillemVanOnsem, modülün corsheadersbu modülü referans aldığını belirtti .

Aynı şeyle karşılaşan diğerleri için, yığın izinin son satırındaki dosya yoluna bakmak sorunlu modülü tanımlamaya yardımcı olabilir. Gördüğüm başka bir örnek:

...
File "/path/to/project/venv/lib/python3.8/site-packages/parler/utils/conf.py", line 10, in <module>
    from django.utils import six
ImportError: cannot import name 'six' from 'django.utils' (/path/to/project/venv/lib/python3.8/site-packages/django/utils/__init__.py)

Bu durumda soruna neden olan modül oldu parler. Umarım bu sorunla karşılaşan diğerlerine yardımcı olur.


3
Lütfen daha düşük Django sürümünü yükleyin, benim durumumda Django-2.1.4'ü kurdum.
smartworld-dm

4
@ smartworld-dm Düşürücü Django sürümü sorunu çözecektir, ancak her zaman eski sürümlerde
kalamazsınız

@ArakkalAbu Aslında projem Django-2.1.4 kullanıyordu ve Django 3.0.0 yanlışlıkla kuruldu.
smartworld-dm

Alt Django mi problemini çözer. Modüller sürümlerini güncelleyene kadar bekleyeceğim.
Jose Luis Quichimbo

21

Neden bu hata / istisna?

Gönderen sürüm notları ,

django.utils.six- Satılan bu kitaplığın kullanımını kaldırın veya altı taneye geçin .

anlamına gelir, django.utils.sixmodül itibaren kaldırıldı .


Kod tabanım " django.utils.six" modülünü kullanmıyor , neden bu hata?

Bu içe aktarma hatası iki nedenden dolayı ortaya çıkabilir,

  1. En önemlisi, kurulu paketlerinizden herhangi biri django.utils.sixmodülü kullanıyor
  2. veya belki kod tabanınızı django.utils.sixmodülü kullanarak

NOT: Çoğu zaman ilk sebep kötü adam 😖😖


Hangi paketin hataya / özel duruma neden olduğunu nasıl belirleyebilirim?

Kolay yol, son birkaç hata izleme satırınıza bakın ve hangi paketin istisnalara neden olduğunu size söyleyecektir.

Örnekler

Örnek 1

Bu örnekte, corsheadersmodül içe aktarma hatasına neden oldu

  File "/path-to-project/project/venv/lib/python3.7/site-packages/corsheaders/__init__.py", line 1, in 
    from .checks import check_settings  # noqa: F401
  File "/path-to-project/project/venv/lib/python3.7/site-packages/corsheaders/checks.py", line 7, in 
    from django.utils import six

Örnek-2

Bu örnekte, jsonfieldmodül içe aktarma hatasına neden oldu

  File "d:\production\myproject\venv\lib\site-packages\jsonfield\fields.py", line 21, in 
    from .encoder import JSONEncoder
  File "d:\production\myproject\venv\lib\site-packages\jsonfield\encoder.py", line 2, in 
    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)

Örnek-3

Bu örnek parlermodülde içe aktarma hatasına neden oldu

...
File "/path/to/project/venv/lib/python3.8/site-packages/parler/utils/conf.py", line 10, in 
    from django.utils import six
ImportError: cannot import name 'six' from 'django.utils' (/path/to/project/venv/lib/python3.8/site-packages/django/utils/__init__.py)

Örnek-4

Bu örnek django_mysqlmodülde içe aktarma hatasına neden oldu

  File "/home/jerin/.virtualenvs/webscraperio/lib/python3.6/site-packages/django_mysql/checks.py", line 9, in 
    from django_mysql.utils import collapse_spaces
  File "/home/jerin/.virtualenvs/webscraperio/lib/python3.6/site-packages/django_mysql/utils.py", line 17, in 
    from django.utils import six
ImportError: cannot import name 'six'


Çözüm nedir?

Hata nedeniyle gibi bazı üçüncü taraf paketleri kaldırdı Eğer django-cors-headers, django-jsonfieldvb son sürümleri karşılık gelen paket sürümlerini yükseltmek .

Hata, kod tabanınızdan kaynaklandıysa, modül yerine altı paket kullanındjango.utils.six


7

Mohammad Masoumi tarafından belirtildiği gibi, paketleri yükseltmek sorunu çözecektir çünkü corsheadersşimdi Django 3.0'ı destekliyor.

pip install --upgrade django-cors-headers

Ayrıca yükseltme djangorestframeworkve drf_yasgbu ImportError önlemek için.


7

Cors headers paketini güncellemeniz gerekir:

pip3 install six
pip3 install --upgrade django-cors-headers 

sadece django == 2.2 sürümüne geçip sadece altı yükleme benim için sorunu çözdü. Neden cors başlıklarını yükseltmemiz gerekiyor?
Mart'ta

1
Django sürümünüzü 3.x'e yükselttiyseniz, cors-headers'ı yükseltmeyi düşünmelisiniz. Bu da başka bir alternatif.
Shedrack

6

İlk olarak, pip'ten altı tane kurun

pip install six

İkincisi, settings.py'de

INSTALLED_APPS = [
  'six']

Üçüncü olarak, altıyı arayın

from six import text_type

Benim için çalışır, Django 3.0.4 var


5

Django'ya, django.utils.six kullanan ve elbette şimdi bozulan bir dizi kitaplık ve eklenti var. Ana endişe mysql-bağlayıcı-python (8.0.18). Basit çözüm, Django için harici kütüphaneyi kullanmaktır, ancak bu kütüphanelerin yazarlarının değişikliklerini yapmaları gerekecektir (veya değişiklikleri geçici olarak kendiniz yapabilirsiniz .... django.utils.six'i altıyla değiştirin).


4

Ben de aynı problemi yaşadım.

Benim sorunum kullanıyordu:

pip install django_taggit==0.22.2

Yaptığımda bunu çözdüm:

pip install django_taggit==1.2.0

çünkü bu en son sürüm.


2
Bu yanıt yararlı olabilir, ancak diğer insanlar başka paketleri yükseltmeyi önerdiğinden orijinal gönderinin altında bir yorum olarak daha iyidir.
DHerls

3

İstisna:

 File "/usr/local/lib/python3.8/dist-packages/django/core/management/__init__.py", line 377, in execute
    django.setup()
  File "/usr/local/lib/python3.8/dist-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python3.8/dist-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/usr/local/lib/python3.8/dist-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/local/lib/python3.8/dist-packages/django_celery_beat/models.py", line 6, in <module>
    import timezone_field
  File "/usr/local/lib/python3.8/dist-packages/timezone_field/__init__.py", line 1, in <module>
    from timezone_field.fields import TimeZoneField
  File "/usr/local/lib/python3.8/dist-packages/timezone_field/fields.py", line 5, in <module>
    from django.utils import six
ImportError: cannot import name 'six' from 'django.utils' (/usr/local/lib/python3.8/dist-packages/django/utils/__init__.py)

Çözüm:

 vi /usr/local/lib/python3.8/dist-packages/timezone_field/fields.py

Değişiklik:

from django.utils import six

Kime:

import six

2

Folks'in ideal çözümü, yükseltme ve temiz kullanımdır, ancak korkunç sıkıntılardaki insanlar için bir çözüm yeterince basittir.

Gelen Djangoutils six.py ve dosya koymak içinde yeni bir dosya oluşturmak:

import six

NOT: Çözüm değil, hemen düzeltme eki için geçici çözüm


1

JSONField Çözümü :

Kullandım jsonfieldve jsonfiled2paketleri. Ancak her iki durumda da aynı hatayla karşılaştım.

django-jsonfieldPaketi yüklediğimde ve geri kalan paketleri kaldırdığımda (jsonfield ile ilgili) sorunum çözüldü.

# In case you have installed the following packages, otherwise ignore them.
pip uninstall jsonfield
pip uninstall jsonfield2

pip install django-jsonfield

Kullanımı :

from django.db import models
from jsonfield import JSONField

class ModelName(models.Model):
    json_field = JSONField()

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.