현재 Django 버전을에서 2.0.6
로 업그레이드했으며 명령 3.0
을 호출 한 후 갑자기이 python manage.py shell
오류가 발생했습니다.
ImportError : ‘django.utils’에서 이름 ‘six’를 가져올 수 없습니다 (/path-to-project/project/venv/lib/python3.7/site-packages/django/utils/ init .py)
전체 추적 :
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
유제:
이 질문 과 django-3.0 , 릴리스 노트를 읽었 지만 그 자료는 도움이되지 못했습니다.
답변
Django 3.0.0 릴리스 노트는 특정 프라이빗 Python 2 호환성 API가 제거 되었음을 지정합니다 . 그들 중에는 django.utils.six
.
이 오류에 대해 @WillemVanOnsem은 모듈 corsheaders
이이 모듈을 참조 하고 있다고 언급했습니다 .
이와 같은 일이 발생하는 다른 사람들에게는 스택 추적의 마지막 줄에서 파일 경로를 보면 문제가있는 모듈을 식별하는 데 도움이 될 수 있습니다. 내가 본 이것의 또 다른 예는 다음과 같습니다.
...
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)
이 경우 문제를 일으키는 모듈은 parler
입니다. 이것이이 문제가 발생하는 다른 사람들에게 도움이되기를 바랍니다.
답변
왜이 오류 / 예외가 발생합니까?
django.utils.six
-이 공급 업체 라이브러리의 사용을 제거하거나 6으로 전환하십시오 .
즉, django.utils.six
모듈이 django-3.0 이상 에서 제거 되었습니다 .
내 코드베이스가 ” django.utils.six
“모듈을 사용하지 않는 이유는 무엇입니까?
이 가져 오기 오류는 두 가지 이유로 발생할 수 있습니다.
- 가장 중요한 것은 설치된 모든 패키지가
django.utils.six
모듈을 사용하고 있다는 것입니다 - 또는
django.utils.six
모듈을 사용하는 코드베이스
참고 : 대부분의 첫 번째 이유는 악당입니다.
어떤 패키지가 오류 / 예외를 일으키는 지 어떻게 알 수 있습니까?
가장 쉬운 방법은 마지막 몇 줄의 오류 추적을 살펴보고 어떤 패키지가 예외를 일으키는 지 알려줍니다.
예
예 -1
이 예에서 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
등 최신 버전에 해당하는 패키지 버전을 업그레이드 .
코드베이스에서 오류가 발생하면 모듈 대신 6 개의 패키지를 사용하십시오.django.utils.six
답변
Mohammad Masoumi가 언급했듯이 corsheaders
지금 Django 3.0을 지원 하기 때문에 패키지를 업그레이드하면 문제가 해결됩니다 .
pip install --upgrade django-cors-headers
나는 또한 업그레이드 djangorestframework
하고 drf_yasg
이 ImportError를 피하기 위해.
답변
cors 헤더 패키지를 업데이트해야합니다.
pip3 install six
pip3 install --upgrade django-cors-headers
답변
먼저 핍에서 6 개를 설치하십시오.
pip install six
둘째, settings.py
INSTALLED_APPS = [
'six']
셋째, 여섯을 호출
from six import text_type
저에게는 장고 3.0.4가 있습니다.
답변
django.utils.six를 사용하는 Django에는 많은 라이브러리와 애드온이 있으며, 현재는 고장났습니다. 주요 관심사는 mysql-connector-python (8.0.18)입니다. 간단한 해결책은 Django 외부의 라이브러리를 사용하는 것이지만 이러한 라이브러리의 작성자는 변경을해야합니다 (또는 일시적으로 직접 변경할 수 있습니다. django.utils.six를 6으로 바꿉니다).
답변
나는 같은 문제가 있었다.
내 문제는 다음을 사용하고있었습니다.
pip install django_taggit==0.22.2
내가했을 때 이것을 해결했다.
pip install django_taggit==1.2.0
최신 버전이기 때문입니다.