web-dev-qa-db-fra.com

ImportError: impossible d'importer le nom «six» de «Django.utils»

Actuellement, j'ai déjà mis à niveau la version de Django from 2.0.6 à 3.0 et soudainement après avoir appelé python manage.py Shell la commande a obtenu cette erreur:

ImportError: impossible d'importer le nom "six" de "Django.utils" (/path-to-project/project/venv/lib/python3.7/site-packages/Django/utils/init . py)

Trace complète:

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

Questions similaires:

J'ai lu ceci Question et Django-3. , note de version , mais ces ressources ne pouvaient pas m'aider.

43
Mohammad Masoumi

Les notes de version Django 3.0.0 spécifient que certaines private Python 2 ont été supprimées . Parmi celles-ci figuraient Django.utils.six.

Pour cette erreur en particulier, @WillemVanOnsem a noté que le module corsheaders faisait référence à ce module.

Pour d'autres personnes rencontrant la même chose, regarder le chemin du fichier sur la dernière ligne de la stacktrace peut aider à identifier le module problématique. Un autre exemple de ce que j'ai vu est:

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

Le module à l'origine du problème dans ce cas était parler. J'espère que cela aide tous ceux qui rencontrent ce problème.

25
Brand0R

Pourquoi cette erreur/exception?

De Django-3.notes de version ,

Django.utils.six - Supprimez l'utilisation de cette bibliothèque vendue ou passez à six .

signifie, Django.utils.six le module a été supprimé de Django-3. en avant .


Ma base de code n'utilise pas "Django.utils.six "module, alors pourquoi cette erreur?

Cette erreur d'importation peut être déclenchée pour deux raisons,

  1. Plus important encore, l'un de vos packages installés utilise le Django.utils.six module
  2. ou peut-être votre base de code en utilisant le Django.utils.six module

REMARQUE: La plupart du temps, la première raison est le méchant ????????


Comment identifier le package à l'origine de l'erreur/exception?

Le moyen le plus simple est de regarder vos dernières lignes de trace d'erreur , et il vous dira quel paquet est à l'origine des exceptions.

Exemples

Exemple 1

Dans cet exemple, corsheaders module a provoqué l'erreur d'importation

  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

Exemple-2

Dans cet exemple, jsonfield module a provoqué l'erreur d'importation

  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)

Exemple-3

Dans cet exemple parler le module a provoqué l'erreur d'importation

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

Exemple-4

Dans cet exemple Django_mysql le module a provoqué l'erreur d'importation

  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'


Quelle est la solution?

Si l'erreur s'est produite en raison de certains packages tiers tels que Django-cors-headers , Django-jsonfield , etc mettez à niveau les versions de package correspondantes vers les dernières versions .

Si l'erreur est survenue à cause de votre base de code, utilisez six package au lieu de Django.utils.six module

17
JPG

Comme mentionné par Mohammad Masoumi, la mise à niveau des packages résoudra le problème car corsheaders prend en charge Django 3.0 maintenant.

pip install --upgrade Django-cors-headers

J'ai également mis à niveau djangorestframework et drf_yasg pour éviter cette ImportError.

5
Jun Zhou

Vous devez mettre à jour le paquet d'en-têtes cors:

pip3 install six
pip3 install --upgrade Django-cors-headers 
5
Shedrack

Il existe un certain nombre de bibliothèques et de modules complémentaires pour Django qui utilisent Django.utils.six, qui bien sûr sont maintenant cassés. Le principal problème est mysql-connector-python (8.0. La solution simple consiste à utiliser la bibliothèque externe à Django, mais les auteurs de ces bibliothèques devront apporter leurs modifications (ou vous pourriez temporairement les modifier vous-même .... remplacez Django.utils.six par six).

4
Lee Harding

J'ai eu le même problème.

Mon problème utilisait:

pip install Django_taggit==0.22.2

J'ai résolu cela quand j'ai fait:

pip install Django_taggit==1.2.0

car c'est la dernière version.

2
Nataliia

Exception:

 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)

Solution:

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

Modifier:

from Django.utils import six

À:

import six
1
Kevin

Tout d'abord, installez six à partir de pip

pip install six

Deuxièmement, dans settings.py

INSTALLED_APPS = [
  'six']

Troisièmement, appelez six

from six import text_type

Pour moi fonctionne, j'ai Django 3.0.4

1
Diego Bianchi

Solution JSONField:

J'ai utilisé jsonfield et jsonfiled2 paquets. Mais dans les deux cas, j'ai fait face à la même erreur.

Mon problème a été résolu lorsque j'ai installé Django-jsonfield package et désinstallez le reste des packages (liés à jsonfield).

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

pip install Django-jsonfield

tilisation:

from Django.db import models
from jsonfield import JSONField

class ModelName(models.Model):
    json_field = JSONField()
1
Mostafa Ghadimi

vous feriez mieux d'exécuter cette commande si vous utilisez Django 3

pip install six

selon ce

0
radkal2

La solution idéale pour les gens est une utilisation mise à nivea et propre, mais une solution de contournement pour les gens dans une situation désespérée est assez simple.

Dans Django utils créez un nouveau fichier six.py et à l'intérieur du fichier put:

import six

REMARQUE: Pas une solution mais une solution de contournement pour l'application immédiate de correctifs

0
AMIT ARORA