Actualmente, ya he actualizado la versión de Django de 2.0.6
a 3.0
y de repente después de llamar al python manage.py shell
comando 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
corsheaders
que todavía utiliza un módulo que se eliminó.from django.utils import six
si las tuviera en su código, y luego elimine sistemáticamente las versiones de todos los paquetesrequirements.txt
que se quejan de esto. En mi caso tuve que chocar tambiéndjango-nested-admin
ydjangorestframework
.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
corsheaders
estaba 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.six
módulo se eliminó de django-3.0 en adelante .Mi base de código no está usando el
django.utils.six
módulo " ", entonces ¿por qué este error?Este error de importación se puede generar debido a dos razones,
django.utils.six
módulodjango.utils.six
mó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
corsheaders
módulo causó el error de importaciónEjemplo 2
En este ejemplo, el
jsonfield
módulo causó el error de importaciónEjemplo 3
En este ejemplo, el
parler
módulo causó el error de importaciónEjemplo 4
En este ejemplo, el
django_mysql
mó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.six
módulofuente
Como mencionó Mohammad Masoumi, la actualización de los paquetes resolverá el problema porque ahora
corsheaders
es compatible con Django 3.0.También actualicé
djangorestframework
ydrf_yasg
para 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
Django
utils 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é
jsonfield
yjsonfiled2
paquetes. Pero en ambos casos, me enfrenté al mismo error.Mi problema se resolvió cuando instalé el
django-jsonfield
paquete 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