Actualmente, ya he actualizado la versión de Django de 2.0.6a 3.0y de repente después de llamar al python manage.py shellcomando recibí este error:
ImportError: no se puede importar el nombre 'seis' de 'django.utils' (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/ init .py)
Rastro completo:
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
Preguntas similares:
Leí esta Pregunta y django-3.0 , nota de lanzamiento , pero esos recursos no pudieron ayudarme.
                    
                        django
                                python-3.x
                                upgrade
                                django-3.0
                                
                    
                    
                        Mohammad Masoumi
fuente
                
                fuente

corsheadersque todavía utiliza un módulo que se eliminó.from django.utils import sixsi las tuviera en su código, y luego elimine sistemáticamente las versiones de todos los paquetesrequirements.txtque se quejan de esto. En mi caso tuve que chocar tambiéndjango-nested-adminydjangorestframework.Respuestas:
Las notas de la versión Django 3.0.0 especifican que se eliminaron ciertas API privadas de compatibilidad con Python 2 . Entre esos estaba
django.utils.six.Para este error específicamente, @WillemVanOnsem señaló que el módulo
corsheadersestaba haciendo referencia a este módulo.Para otros que se encuentran con lo mismo, mirar la ruta del archivo en la última línea del stacktrace puede ayudar a identificar el módulo problemático. Otro ejemplo de esto que he visto es:
El módulo que causó el problema en este caso fue
parler. Espero que esto ayude a cualquier otro que se encuentre con este problema.fuente
¿Por qué este error / excepción?
De las notas de la versión django-3.0 ,
significa que el
django.utils.sixmódulo se eliminó de django-3.0 en adelante .Mi base de código no está usando el
django.utils.sixmódulo " ", entonces ¿por qué este error?Este error de importación se puede generar debido a dos razones,
django.utils.sixmódulodjango.utils.sixmóduloNOTA: La mayoría de las veces la primera razón es el villano 😖😖
¿Cómo puedo identificar qué paquete está causando el error / excepción?
La manera fácil es buscar en las últimas líneas de rastreo de errores y le dirá qué paquete está causando las excepciones.
Ejemplos
Ejemplo 1
En este ejemplo, el
corsheadersmódulo causó el error de importaciónEjemplo 2
En este ejemplo, el
jsonfieldmódulo causó el error de importaciónEjemplo 3
En este ejemplo, el
parlermódulo causó el error de importaciónEjemplo 4
En este ejemplo, el
django_mysqlmódulo causó el error de importación¿Cuál es la solución?
Si el error generado debido a algunos paquetes de terceros como
django-cors-headers,django-jsonfield, etc. actualizar las versiones de los paquetes correspondientes a las versiones más recientes .Si el error se debe a su código base, use seis paquetes en lugar del
django.utils.sixmódulofuente
Como mencionó Mohammad Masoumi, la actualización de los paquetes resolverá el problema porque ahora
corsheaderses compatible con Django 3.0.También actualicé
djangorestframeworkydrf_yasgpara evitar este ImportError.fuente
Necesita actualizar el paquete de encabezados cors:
fuente
Primero, instala seis desde pip
Segundo, en settings.py
Tercero, llama seis
Para mí funciona, tengo Django 3.0.4
fuente
Hay varias bibliotecas y complementos para Django que usan django.utils.six, que por supuesto ahora están rotos. El principal motivo de preocupación es mysql-connector-python (8.0.18). La solución simple es usar la biblioteca externa a Django, pero los autores de estas bibliotecas necesitarán hacer sus cambios (o usted mismo podría hacer los cambios temporalmente ... reemplace django.utils.six por seis).
fuente
Yo tuve el mismo problema.
Mi problema estaba usando:
Resolví esto cuando lo hice:
porque esa es la última versión
fuente
Excepción:
Solución:
Cambio:
A:
fuente
La solución ideal de la gente es una actualización y un uso limpio, pero una solución alternativa para la gente en una situación desesperada es bastante simple.
En
Djangoutils crea un nuevo archivo six.py y dentro del archivo pon:NOTA: no es una solución, sino una solución alternativa para parches inmediatos
fuente
Solución JSONField :
Usé
jsonfieldyjsonfiled2paquetes. Pero en ambos casos, me enfrenté al mismo error.Mi problema se resolvió cuando instalé el
django-jsonfieldpaquete y desinstalé el resto de los paquetes (relacionados con jsonfield).Uso :
fuente
es mejor que ejecutes este comando si estás usando django 3
de acuerdo a esto
https://docs.djangoproject.com/en/3.0/releases/3.0/#removed-private-python-2-compatibility-apis
fuente