Actuellement, j'ai déjà mis à niveau la version de Django from 2.0.6
à 3.0
et soudainement après avoir appelé python manage.py Shell
la commande a 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 ceci Question et Django-3. , note de version , mais ces ressources ne pouvaient pas m'aider.
Les notes de version Django 3.0.0 spécifient que certaines private Python 2 ont été supprimées . Parmi celles-ci figuraient 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:
...
File "/path/to/project/venv/lib/python3.8/site-packages/parler/utils/conf.py", line 10, in <module>
from Django.utils import six
ImportError: cannot import name 'six' from 'Django.utils' (/path/to/project/venv/lib/python3.8/site-packages/Django/utils/__init__.py)
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.
De Django-3.notes de version ,
Django.utils.six
- Supprimez l'utilisation de cette bibliothèque vendue ou passez à six .
signifie, Django.utils.six
le module a été supprimé de Django-3. en avant .
Django.utils.six
"module, alors pourquoi cette erreur?Cette erreur d'importation peut être déclenchée pour deux raisons,
Django.utils.six
module Django.utils.six
moduleREMARQUE: La plupart du temps, la première raison est le méchant ????????
Le moyen le plus simple est de regarder vos dernières lignes de trace d'erreur , et il vous dira quel paquet est à l'origine des exceptions.
Dans cet exemple, corsheaders
module a provoqué l'erreur d'importation
File "/path-to-project/project/venv/lib/python3.7/site-packages/corsheaders/__init__.py", line 1, in
from .checks import check_settings # noqa: F401
File "/path-to-project/project/venv/lib/python3.7/site-packages/corsheaders/checks.py", line 7, in
from Django.utils import six
Dans cet exemple, jsonfield
module a provoqué l'erreur d'importation
File "d:\production\myproject\venv\lib\site-packages\jsonfield\fields.py", line 21, in
from .encoder import JSONEncoder
File "d:\production\myproject\venv\lib\site-packages\jsonfield\encoder.py", line 2, in
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)
Dans cet exemple parler
le module a provoqué l'erreur d'importation
...
File "/path/to/project/venv/lib/python3.8/site-packages/parler/utils/conf.py", line 10, in
from Django.utils import six
ImportError: cannot import name 'six' from 'Django.utils' (/path/to/project/venv/lib/python3.8/site-packages/Django/utils/__init__.py)
Dans cet exemple Django_mysql
le module a provoqué l'erreur d'importation
File "/home/jerin/.virtualenvs/webscraperio/lib/python3.6/site-packages/Django_mysql/checks.py", line 9, in
from Django_mysql.utils import collapse_spaces
File "/home/jerin/.virtualenvs/webscraperio/lib/python3.6/site-packages/Django_mysql/utils.py", line 17, in
from Django.utils import six
ImportError: cannot import name 'six'
Si l'erreur s'est produite en raison de certains packages tiers tels que Django-cors-headers
, Django-jsonfield
, etc mettez à niveau les versions de package correspondantes vers les dernières versions .
Si l'erreur est survenue à cause de votre base de code, utilisez six package au lieu de Django.utils.six
module
Comme mentionné par Mohammad Masoumi, la mise à niveau des packages résoudra le problème car corsheaders
prend en charge Django 3.0 maintenant.
pip install --upgrade Django-cors-headers
J'ai également mis à niveau djangorestframework
et drf_yasg
pour éviter cette ImportError.
Vous devez mettre à jour le paquet d'en-têtes cors:
pip3 install six
pip3 install --upgrade Django-cors-headers
Il existe un certain nombre de bibliothèques et de modules complémentaires pour Django qui utilisent Django.utils.six, qui bien sûr sont maintenant cassés. Le principal problème est mysql-connector-python (8.0. 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 les modifier vous-même .... remplacez Django.utils.six par six).
J'ai eu le même problème.
Mon problème utilisait:
pip install Django_taggit==0.22.2
J'ai résolu cela quand j'ai fait:
pip install Django_taggit==1.2.0
car c'est la dernière version.
Exception:
File "/usr/local/lib/python3.8/dist-packages/Django/core/management/__init__.py", line 377, in execute
Django.setup()
File "/usr/local/lib/python3.8/dist-packages/Django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python3.8/dist-packages/Django/apps/registry.py", line 114, in populate
app_config.import_models()
File "/usr/local/lib/python3.8/dist-packages/Django/apps/config.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/usr/local/lib/python3.8/dist-packages/Django_celery_beat/models.py", line 6, in <module>
import timezone_field
File "/usr/local/lib/python3.8/dist-packages/timezone_field/__init__.py", line 1, in <module>
from timezone_field.fields import TimeZoneField
File "/usr/local/lib/python3.8/dist-packages/timezone_field/fields.py", line 5, in <module>
from Django.utils import six
ImportError: cannot import name 'six' from 'Django.utils' (/usr/local/lib/python3.8/dist-packages/Django/utils/__init__.py)
Solution:
vi /usr/local/lib/python3.8/dist-packages/timezone_field/fields.py
Modifier:
from Django.utils import six
À:
import six
Tout d'abord, installez six à partir de pip
pip install six
Deuxièmement, dans settings.py
INSTALLED_APPS = [
'six']
Troisièmement, appelez six
from six import text_type
Pour moi fonctionne, j'ai Django 3.0.4
Solution JSONField:
J'ai utilisé jsonfield
et jsonfiled2
paquets. Mais dans les deux cas, j'ai fait face à la même erreur.
Mon problème a été résolu lorsque j'ai installé Django-jsonfield
package et désinstallez le reste des packages (liés à jsonfield).
# In case you have installed the following packages, otherwise ignore them.
pip uninstall jsonfield
pip uninstall jsonfield2
pip install Django-jsonfield
tilisation:
from Django.db import models
from jsonfield import JSONField
class ModelName(models.Model):
json_field = JSONField()
vous feriez mieux d'exécuter cette commande si vous utilisez Django 3
pip install six
selon ce
La solution idéale pour les gens est une utilisation mise à nivea et propre, mais une solution de contournement pour les gens dans une situation désespérée est assez simple.
Dans Django
utils créez un nouveau fichier six.py et à l'intérieur du fichier put:
import six
REMARQUE: Pas une solution mais une solution de contournement pour l'application immédiate de correctifs