ImportError: 'django.utils' से नाम 'छह' आयात नहीं कर सकते


48

वर्तमान में, मैंने पहले से ही Django के संस्करण को अपग्रेड कर 2.0.6दिया है 3.0और अचानक कॉलिंग python manage.py shellकमांड के बाद यह त्रुटि मिली:

ImportError: नहीं कर सकते हैं आयात नाम 'छह' 'django.utils' से (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/ init .py)

पूर्ण ट्रेस:

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

इसी तरह के प्रश्न:

मैंने यह प्रश्न और , रिलीज़ नोट पढ़ा , लेकिन वे संसाधन मेरी मदद नहीं कर सके।


2
आप एक पैकेज का उपयोग करते हैं corsheadersजो अभी भी एक मॉड्यूल का उपयोग करता है जिसे हटा दिया गया था।
विल्म वान ओन्सेम

1
@WillemVanOnsem बहुत बहुत धन्यवाद, उन्नत कि।
मोहम्मद मासूमि

2
@MohammadMasoumi मूल रूप से, from django.utils import sixयदि आप उन्हें अपने कोड में रखते हैं, जैसे स्पष्ट कथन हटा दें , और फिर व्यवस्थित रूप से सभी संकुल के संस्करणों को requirements.txtइस बारे में शिकायत करें। मेरे मामले में मैं भी टक्कर पड़ा django-nested-adminऔर djangorestframework
राउल लासनर

यदि आप एक ऐसे पैकेज के साथ काम कर रहे हैं जिसे django 3.0 के साथ काम करने के लिए अद्यतन नहीं किया गया है, तो आप इसे एक साधारण पैच के साथ ठीक कर सकते हैं ।
मोनिका

1
हाय मोहम्मद, क्या आपकी समस्या हल हो रही है? उचित समाधान क्या है?
मुस्तफा ग़दीमी

जवाबों:


29

Django 3.0.0 जारी नोटों में कहा गया है कि कुछ निजी पायथन 2 संगतता एपीआई हटा दिए गए थे । उनमें से था django.utils.six

इस त्रुटि के लिए विशेष रूप से @WillemVanOnsem ने उल्लेख किया कि मॉड्यूल इस मॉड्यूल corsheadersको संदर्भित कर रहा था।

दूसरों को इसी बात का सामना करने के लिए, स्टैकट्रेस की अंतिम पंक्ति पर फ़ाइल पथ को देखने से समस्याग्रस्त मॉड्यूल की पहचान करने में मदद मिल सकती है। इसका एक और उदाहरण मैंने देखा है:

...
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)

इस मामले में समस्या पैदा करने वाला मॉड्यूल था parler। आशा है कि यह इस मुद्दे का सामना करने वाले किसी अन्य व्यक्ति की मदद करता है।


3
कृपया निम्न Django संस्करण स्थापित करें, मेरे मामले में मैंने Django-2.1.4 स्थापित किया है।
स्मार्टवर्ल्ड-डीएम

4
@ स्मार्टवर्ल्ड-डीएम डाउनग्रेडिंग Django संस्करण समस्या को हल करेगा, लेकिन आप हमेशा पुराने संस्करणों में नहीं रह सकते हैं, बदलें अपरिहार्य है
अरकल अबू

@ अराकालअबू वास्तव में मेरी परियोजना Django-2.1.4 का उपयोग कर रही थी और Django 3.0.0 आकस्मिक रूप से स्थापित थी।
स्मार्टवर्ल्ड-डीएम

लोअर Django मील की समस्या का समाधान। मैं तब तक इंतजार करूंगा जब तक मॉड्यूल अपने संस्करणों को अपडेट नहीं करेंगे।
जोस लुइस क्विचिमबो

21

यह त्रुटि / अपवाद क्यों?

से रिलीज नोट्स ,

django.utils.six- इस वर्गीकृत पुस्तकालय का उपयोग निकालें या छह पर जाएं

इसका मतलब है, django.utils.sixमॉड्यूल को हटा दिया गया था बाद


मेरा कोडबेस " django.utils.six" मॉड्यूल का उपयोग नहीं कर रहा है , फिर यह त्रुटि क्यों?

इस आयात त्रुटि को दो कारणों से उठाया जा सकता है,

  1. सबसे महत्वपूर्ण बात, आपके किसी भी स्थापित पैकेज का उपयोग कर रहे हैंdjango.utils.six मॉड्यूल है
  2. या शायद अपने कोडबेस का उपयोग कर django.utils.six मॉड्यूल

ध्यान दें: ज्यादातर समय पहला कारण खलनायक time है


मैं कैसे पहचान सकता हूं कि कौन सा पैकेज त्रुटि / अपवाद का कारण बन रहा है?

आसान तरीका यह है, त्रुटि ट्रेसबैक की अपनी अंतिम कुछ पंक्तियों को देखें , और यह आपको बताएगा कि कौन सा पैकेज अपवाद पैदा कर रहा है।

उदाहरण

उदाहरण 1

इस उदाहरण में, corsheadersमॉड्यूल आयात त्रुटि का कारण बना

  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

उदाहरण -2

इस उदाहरण में, jsonfieldमॉड्यूल आयात त्रुटि का कारण बना

  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)

उदाहरण -3

इस उदाहरण में parlerमॉड्यूल आयात त्रुटि का कारण बना

...
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)

उदाहरण -4

इस उदाहरण में django_mysqlमॉड्यूल आयात त्रुटि का कारण बना

  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'


उपाय क्या है?

यदि कुछ तृतीय-पक्ष पैकेज जैसे , आदि के कारण त्रुटि हुई django-cors-headers, तो संबंधित पैकेज संस्करणों को नवीनतम संस्करणों में अपग्रेड करें । यदि आपके कोडबेस से त्रुटि हुई है, तो मॉड्यूल के बजाय छह पैकेज का उपयोग करेंdjango-jsonfield

django.utils.six


7

जैसा कि मोहम्मद मसूमी ने उल्लेख किया है, पैकेजों को अपग्रेड करने से समस्या हल हो जाएगी क्योंकि corsheadersअब Django 3.0 का समर्थन कर रहा है।

pip install --upgrade django-cors-headers

मैं भी उन्नत किया djangorestframeworkऔर drf_yasgइस ImportError से बचने के लिए।


7

आपको cors हेडर पैकेज अपडेट करना होगा:

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

सिर्फ django == 2.2 में अपग्रेड करना और सिर्फ छह इंस्टॉल करने से मेरे लिए समस्या हल हो गई। हमें कॉर्स-हेडर्स को अपग्रेड करने की आवश्यकता क्यों है?
क्योंकि_म_बतमान

1
अगर आपने अपने django वर्जन को 3.x में अपग्रेड किया है तो आपको cors-headers को अपग्रेड करने पर विचार करना चाहिए। वह दूसरा विकल्प भी है।
शेड्रैक

6

सबसे पहले, पाइप से छह स्थापित करें

pip install six

दूसरा, सेटिंग्समें

INSTALLED_APPS = [
  'six']

तीसरा, छह को बुलाओ

from six import text_type

मेरे काम के लिए, मेरे पास Django 3.0.4 है


5

Django में कई पुस्तकालय और ऐड-ऑन हैं जो django.utils.six का उपयोग करते हैं, जो अब निश्चित रूप से टूट गए हैं। मुख्य चिंता का विषय mysql-कनेक्टर-पायथन (8.0.18) है। इसका सरल उपाय यह है कि पुस्तकालय को बाहरी रूप से Django का उपयोग किया जाए, लेकिन इन पुस्तकालयों के लेखकों को अपने परिवर्तन करने की आवश्यकता होगी (या आप अस्थायी रूप से परिवर्तन स्वयं कर सकते हैं .... django.utils.six को छह के साथ बदलें)।


4

मुझे भी यही समस्या थी।

मेरा मुद्दा उपयोग कर रहा था:

pip install django_taggit==0.22.2

मैंने इसे हल किया जब मैंने किया:

pip install django_taggit==1.2.0

क्योंकि वह नवीनतम संस्करण है।


2
यह उत्तर उपयोगी हो सकता है, लेकिन यह मूल पोस्ट के तहत एक टिप्पणी के रूप में बेहतर है क्योंकि अन्य लोगों ने पहले ही अन्य पैकेजों को अपग्रेड करने की सिफारिश की है।
DHERls

3

अपवाद:

 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)

समाधान:

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

परिवर्तन:

from django.utils import six

सेवा:

import six

2

फोल्क्स का आदर्श समाधान एक अपग्रेड है और स्वच्छ उपयोग है, लेकिन गंभीर तनाव में लोगों के लिए एक समाधान पर्याप्त सरल है।

में Djangoutils six.py और फ़ाइल डाल अंदर एक नई फ़ाइल बनाना:

import six

नोट: समाधान नहीं बल्कि तत्काल पैचिंग के लिए समाधान


1

JSONField Solution :

मैंने इस्तेमाल किया jsonfieldऔर jsonfiled2पैकेज किया। लेकिन दोनों ही मामलों में, मुझे एक ही त्रुटि का सामना करना पड़ा।

मेरी समस्या हल हो गई जब मैंने django-jsonfieldपैकेज स्थापित किया है और बाकी पैकेजों (jsonfield से संबंधित) की स्थापना रद्द कर दी है।

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

pip install django-jsonfield

उपयोग :

from django.db import models
from jsonfield import JSONField

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

0

यदि आप django 3 का उपयोग कर रहे हैं तो आप इस कमांड को बेहतर तरीके से चला सकते हैं

pip install six

इसके अनुसार

https://docs.djangoproject.com/en/3.0/releases/3.0/#removed-private-python-2-compatibility-apis


कृपया अनुपलब्ध लिंक जोड़ें
Bemis

मुझे अब तक सटीक लल्लनक याद नहीं है, लेकिन यकीन है कि यह कुछ इस तरह से था ... वैसे भी धन्यवाद;)
राधिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.