Actualmente he actualizado la versión de Django 2.2 a 3.0 y de repente recibo un error como el siguiente.
ImportError: no se puede importar el nombre 'seis' de 'django.utils'
He comprobado que Traceback es como a continuación.
Traceback (most recent call last):
File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\ptvsd_launcher.py", line 43, in <module>
main(ptvsdArgs)
File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 432, in main
run()
File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 316, in run_file
runpy.run_path(target, run_name='__main__')
File "C:\Python37\Lib\runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "C:\Python37\Lib\runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "C:\Python37\Lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "D:\production\myproject\erp_project\manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "d:\production\myproject\venv\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
utility.execute()
File "d:\production\myproject\venv\lib\site-packages\django\core\management\__init__.py", line 377, in execute
django.setup()
File "d:\production\myproject\venv\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "d:\production\myproject\venv\lib\site-packages\django\apps\registry.py", line 92, in populate
app_config = AppConfig.create(entry)
File "d:\production\myproject\venv\lib\site-packages\django\apps\config.py", line 90, in create
module = import_module(entry)
File "d:\production\myproject\venv\lib\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 "d:\production\myproject\venv\lib\site-packages\post_office\__init__.py", line 3, in <module>
from .backends import EmailBackend
File "d:\production\myproject\venv\lib\site-packages\post_office\backends.py", line 6, in <module>
from .settings import get_default_priority
File "d:\production\myproject\venv\lib\site-packages\post_office\settings.py", line 101, in <module>
context_field_class = import_attribute(CONTEXT_FIELD_CLASS)
File "d:\production\myproject\venv\lib\site-packages\post_office\compat.py", line 45, in import_attribute
module = importlib.import_module(module_name)
File "d:\production\myproject\venv\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "d:\production\myproject\venv\lib\site-packages\jsonfield\__init__.py", line 1, in <module>
from .fields import JSONField, JSONCharField # noqa
File "d:\production\myproject\venv\lib\site-packages\jsonfield\fields.py", line 21, in <module>
from .encoder import JSONEncoder
File "d:\production\myproject\venv\lib\site-packages\jsonfield\encoder.py", line 2, in <module>
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)
He revisado la carpeta Lib \ site-packages \ django \ utils y no he encontrado el archivo six.py pero todavía desde Lib \ site-packages \ jsonfield \ encode.py que contiene la línea de django.utils import six, zona horaria que intenta importar seis pero no puede encontrar.
Versión anterior de django que contiene el archivo six.py en la carpeta Lib \ site-packages \ django \ utils.
Alguna idea de como resolver esto ?
django
python-3.x
Luna
fuente
fuente
jsonfield
paquete el que necesita un módulo en Django que ya no se puede encontrar.Respuestas:
Respuesta corta : es posible que desee abandonar
django-jsonfield
.Según el rastreo, está utilizando el
django-jsonfield
paquete [GitHub] , y este es un problema conocido [GitHub-issue] . Depende deldjango.utils.six
módulo, pero ese módulo se ha eliminado en django-3.0 .Por el momento, no puede usar django-3.0 con django-jsonfield , y dado que el último compromiso con este proyecto es a partir de octubre de 2017, tal vez el proyecto ya no esté tan "activo" y, por lo tanto, podría llevar mucho tiempo (o incluso nunca) arreglarse. El sucesor de django-jsonfield es jsonfield2 ([GitHub]) . Se hizo compatible con django-3.0 mediante una solicitud de extracción en octubre (2019) [GitHub-pr] .
fuente
jsonfield2
se ha archivado y fusionado enjsonfield
( GitHub ).para usar los seis módulos, puede instalarlo directamente usando pip y luego modificar el paquete django-jsonfield en consecuencia. Lo que quiero decir es encontrar los archivos en el paquete donde los hay
from django.utils import six
y reemplazarlos conimport six
. Entonces debería estar funcionando. Me enfrenté al mismo problema al usar djongo con django 3.0. Encontré el archivo respectivo y lo reemplacé con la sugerencia anterior. Tenga en cuenta que nunca se recomienda hacer esto si está trabajando en un proyecto de nivel de producción o de empresa. Lo hice para mi proyecto de mascota.fuente
A especifica en Django liberación 3.0 nota ,
django.utils.six
se elimina. En caso de que necesite que, se aconseja el uso de paquetes PyPI vezEn su caso, el
jsonfield
paquete puede ser reemplazado por el campo JSON nativo de Django . Otra solución sería bifurcarsejsonfield
para resolver su problema, o hacer un RP en el repositorio del proyecto 'fuente