Recently, I upgraded the version of Django framework from 2.0.6
to 3.0
and suddenly after calling python manage.py shell
command, I got this exception:
ImportError: cannot import name 'six' from 'django.utils' (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/init.py)
Full trace:
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
Similar Questions:
I read this Question and this django-3.0, release note , but those resources couldn't help me.
ベストアンサー1
Why this error/exception?
From django-3.0release notes,
django.utils.six
- Remove usage of this vendored library or switch to six.
means, django.utils.six
module was removed from django-3.0以降。
私のコードベースは " django.utils.six
" モジュールを使用していませんが、なぜこのエラーが発生するのでしょうか?
このインポートエラーは、次の2つの理由で発生する可能性があります。
- 最も重要なこと、インストールされたパッケージのいずれかが
django.utils.six
モジュールを使用しています - あるいは、コードベースで
django.utils.six
モジュール
注記:ほとんどの場合、最初の理由は悪役です����
エラー/例外の原因となっているパッケージを特定するにはどうすればよいですか?
簡単な方法は、エラートレースバックの最後の数行を調べてくださいすると、どのパッケージが例外を引き起こしているかがわかります。
例
コルセア
この例では、corsheaders
モジュールがインポートエラーを引き起こしました
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
例2
この例では、jsonfield
モジュールがインポートエラーを引き起こしました
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)
例3
この例ではparler
モジュールがインポートエラーを引き起こしました
...
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)
例4
この例ではdjango_mysql
モジュールがインポートエラーを引き起こしました
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'
解決策は何ですか?
サードパーティのパッケージなどが原因でエラーが発生した場合は、django-cors-headers
、django-jsonfield
など対応するパッケージバージョンを最新バージョンにアップグレードするすでに最新バージョンを使用している場合は、開発者に問題を報告してください。
コードベースが原因でエラーが発生した場合は、六パッケージの代わりにdjango.utils.six
モジュール