À l' heure actuelle, je l' ai déjà mis à jour la version de Django 2.0.6
à 3.0
et tout à coup après avoir appelé python manage.py shell
commande 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 cette question et django-3.0 , note de version , mais ces ressources ne pouvaient pas m'aider.
django
python-3.x
upgrade
django-3.0
Mohammad Masoumi
la source
la source
corsheaders
qui utilise toujours un module qui a été supprimé.from django.utils import six
si vous les aviez dans votre code, puis bumpez systématiquement les versions de tous les packagesrequirements.txt
qui se plaignent de cela. Dans mon cas, je devais aussi bossedjango-nested-admin
etdjangorestframework
.Réponses:
Les notes de publication de Django 3.0.0 spécifient que certaines API de compatibilité Python 2 privées ont été supprimées . Parmi ceux-ci, il y avait
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:
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.la source
Pourquoi cette erreur / exception?
À partir des notes de publication de django-3.0 ,
des moyens, le
django.utils.six
module a été retiré de django-3,0 en avant .Ma base de code n'utilise pas le
django.utils.six
module " ", alors pourquoi cette erreur?Cette erreur d'importation peut être déclenchée pour deux raisons,
django.utils.six
moduledjango.utils.six
moduleNOTE: La plupart du temps, la première raison est le méchant 😖😖
Comment puis-je identifier le package à l'origine de l'erreur / exception?
La méthode la plus simple consiste à examiner vos dernières lignes de trace d'erreur et il vous indiquera quel package est à l'origine des exceptions.
Exemples
Exemple 1
Dans cet exemple, le
corsheaders
module a provoqué l'erreur d'importationExemple-2
Dans cet exemple, le
jsonfield
module a provoqué l'erreur d'importationExemple-3
Dans cet exemple, le
parler
module a provoqué l'erreur d'importationExemple-4
Dans cet exemple, le
django_mysql
module a provoqué l'erreur d'importationQuelle est la solution?
Si l'erreur soulevée en raison de certains paquets tiers comme
django-cors-headers
,django-jsonfield
, etc mettre à niveau les versions de paquet correspondant à des versions plus récentes .Si l'erreur s'est produite car à partir de votre base de code, utilisez le package six au lieu du
django.utils.six
modulela source
Comme mentionné par Mohammad Masoumi, la mise à niveau des packages résoudra le problème car
corsheaders
prend actuellement en charge Django 3.0.J'ai également mis à jour
djangorestframework
etdrf_yasg
pour éviter cette ImportError.la source
Vous devez mettre à jour le paquet d'en-têtes cors:
la source
Tout d'abord, installez six à partir de pip
Deuxièmement, dans settings.py
Troisièmement, appelez six
Pour moi ça marche, j'ai Django 3.0.4
la source
Il existe un certain nombre de bibliothèques et d'add-ons à Django qui utilisent django.utils.six, qui bien sûr sont maintenant cassés. Le principal problème est mysql-connector-python (8.0.18). 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 faire les modifications vous-même ... remplacez django.utils.six par six).
la source
J'ai eu le même problème.
Mon problème utilisait:
J'ai résolu cela quand j'ai fait:
car c'est la dernière version.
la source
Exception:
Solution:
Changement:
À:
la source
La solution idéale pour les gens est une mise à niveau pour les gens et une utilisation propre, mais une solution de contournement pour les gens en détresse est assez simple.
Dans les
Django
utils, créez un nouveau fichier six.py et à l'intérieur du fichier put:REMARQUE: pas une solution mais une solution de contournement pour l'application immédiate de correctifs
la source
JSONField Solution :
J'ai utilisé
jsonfield
etjsonfiled2
emballé. Mais dans les deux cas, j'ai fait face à la même erreur.Mon problème a été résolu lorsque j'ai installé le
django-jsonfield
package et désinstallé le reste des packages (liés à jsonfield).Utilisation :
la source
vous feriez mieux d'exécuter cette commande si vous utilisez django 3
selon ce
https://docs.djangoproject.com/en/3.0/releases/3.0/#removed-private-python-2-compatibility-apis
la source