Atualmente, eu já atualizei a versão do Django de e 2.0.6
para 3.0
repente, depois de chamar o python manage.py shell
comando, recebi este erro:
ImportError: não é possível importar o nome 'six' de 'django.utils' (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/ init .py)
Rastreio 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
Perguntas semelhantes:
Li esta pergunta e o django-3.0 , nota de lançamento , mas esses recursos não puderam me ajudar.
django
python-3.x
upgrade
django-3.0
Mohammad Masoumi
fonte
fonte
corsheaders
que ainda usa um módulo que foi removido.from django.utils import six
se você as tivesse em seu código e, em seguida, bata sistematicamente nas versões de todos os pacotesrequirements.txt
que se queixam disso. No meu caso, eu também tive que esbarrardjango-nested-admin
edjangorestframework
.Respostas:
As notas de versão do Django 3.0.0 especificam que determinadas APIs de compatibilidade privadas do Python 2 foram removidas . Entre esses estava
django.utils.six
.Para este erro especificamente, o @WillemVanOnsem observou que o módulo
corsheaders
estava fazendo referência a este módulo.Para outras pessoas que encontram a mesma coisa, olhar o caminho do arquivo na última linha do stacktrace pode ajudar a identificar o módulo problemático. Outro exemplo disso que eu vi é:
O módulo que causou o problema neste caso foi
parler
. Espero que isso ajude outras pessoas que encontrarem esse problema.fonte
Por que esse erro / exceção?
Nas notas de versão do django-3.0 ,
significa que o
django.utils.six
módulo foi removido do django-3.0 em diante .Minha base de código não está usando o
django.utils.six
módulo " ", então por que esse erro?Esse erro de importação pode ser gerado por dois motivos:
django.utils.six
módulodjango.utils.six
móduloNOTA: Na maioria das vezes, o primeiro motivo é o vilão 😖😖
Como posso identificar qual pacote está causando o erro / exceção?
A maneira mais fácil é, observe suas últimas linhas de rastreamento de erros e ele informará qual pacote está causando as exceções.
Exemplos
Exemplo 1
Neste exemplo, o
corsheaders
módulo causou o erro de importaçãoExemplo-2
Neste exemplo, o
jsonfield
módulo causou o erro de importaçãoExemplo-3
Neste
parler
módulo de exemplo, ocorreu o erro de importaçãoExemplo-4
Neste
django_mysql
módulo de exemplo, ocorreu o erro de importaçãoQual é a solução?
Se o erro levantada por causa de alguns pacotes de terceiros, como
django-cors-headers
,django-jsonfield
, etc atualizar as versões de pacotes correspondentes para versões mais recentes .Se o erro foi causado por causa da sua base de código, use seis pacotes em vez do
django.utils.six
módulofonte
Conforme mencionado por Mohammad Masoumi, a atualização dos pacotes resolverá o problema, pois agora
corsheaders
é compatível com o Django 3.0.Também atualizei
djangorestframework
edrf_yasg
para evitar esse ImportError.fonte
Você precisa atualizar o pacote de cabeçalhos cors:
fonte
Primeiro, instale seis do pip
Segundo, em settings.py
Terceiro, ligue para seis
Para mim funciona, eu tenho o Django 3.0.4
fonte
Existem várias bibliotecas e complementos no Django que usam django.utils.six, que obviamente estão quebrados. O principal motivo de preocupação é o mysql-connector-python (8.0.18). A solução simples é usar a biblioteca externa ao Django, mas os autores dessas bibliotecas precisarão fazer suas alterações (ou você pode fazer as alterações temporariamente por conta própria ... substitua django.utils.six por seis).
fonte
Eu tive o mesmo problema.
Meu problema foi usando:
Eu resolvi isso quando fiz:
porque essa é a versão mais recente.
fonte
Exceção:
Solução:
Mudança:
Para:
fonte
A solução ideal para as pessoas é uma atualização e uso limpo, mas uma solução alternativa para pessoas em apuros é bastante simples.
Nos
Django
utilitários, crie um novo arquivo six.py e, dentro do arquivo, coloque:NOTA: Não é uma solução, mas uma solução alternativa para aplicação imediata de patches
fonte
Solução JSONField :
Eu usei
jsonfield
ejsonfiled2
pacotes. Mas nos dois casos, eu enfrentei o mesmo erro.Meu problema foi resolvido ao instalar o
django-jsonfield
pacote e desinstalar o restante dos pacotes (relacionados ao jsonfield).Uso :
fonte
é melhor você executar este comando se estiver usando o django 3
de acordo com isso
https://docs.djangoproject.com/en/3.0/releases/3.0/#removed-private-python-2-compatibility-apis
fonte