ImportError:「django.utils」から「six」という名前をインポートできません


49

現在、私はすでにからのDjangoのバージョンをアップグレードしている2.0.63.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

同様の質問:

私は、この読み取り質問リリースノートを、しかし、それらのリソースは、私を助けることができませんでした。


2
corsheaders削除されたモジュールをまだ使用しているパッケージを使用しています。
Willem Van Onsem

1
@WillemVanOnsemありがとうございます。アップグレードしました。
Mohammad Masoumi

2
@MohammadMasoumi基本的に、from django.utils import sixコード内にあるような明示的なステートメントを削除し、requirements.txtこれについてすべてのパッケージのバージョンを体系的にバンプします。私の場合、私もバンプする必要がdjango-nested-adminありましたdjangorestframework
Raul Laasner

django 3.0で動作するように更新されていないパッケージを使用している場合は、単純なパッチでこれを修正できます。
モニカ

1
こんにちはMohammad、あなたの問題は解決されましたか?適切な解決策は何ですか?
モスタファガディミ

回答:


29

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。これがこの問題に遭遇した他の人を助けることを願っています。


3
私の場合Django-2.1.4をインストールしたので、より低いバージョンのDjangoをインストールしてください。
smartworld-dm

4
@ smartworld-dm Djangoバージョンをダウングレードすると問題は解決しますが、常に古いバージョンに留まることはできません。変更は避け
Arakkal Abu

@ArakkalAbu実際、私のプロジェクトはDjango-2.1.4を使用していて、Django 3.0.0が誤ってインストールされました。
smartworld-dm

低いDjangoはmi問題を解決します。モジュールがバージョンを更新するまで待ちます。
Jose Luis Quichimbo

21

なぜこのエラー/例外ですか?

からのリリースノート

django.utils.six -このベンダーライブラリの使用を削除するか、 6つにます。

つまり、django.utils.sixモジュールは以降から削除されました


コードベースが " django.utils.six"モジュールを使用していないのに、なぜこのエラーが発生するのですか?

このインポートエラーは、2つの理由で発生する可能性があります。

  1. 最も重要なのは、インストールされているパッケージのいずれかがdjango.utils.sixモジュールを使用していることです
  2. または、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-headersdjango-jsonfieldなどが、最新のバージョンに対応するパッケージのバージョンをアップグレードします

コードベースからエラーが発生した場合は、モジュールではなく6つのパッケージを使用しdjango.utils.sixます


7

Mohammad Masoumiが述べたように、corsheadersは現在Django 3.0をサポートしているため、パッケージをアップグレードすると問題が解決します。

pip install --upgrade django-cors-headers

私もアップグレードdjangorestframeworkし、drf_yasgこれはImportErrorを避けるために。


7

corsヘッダーパッケージを更新する必要があります。

pip3 install six
pip3 install --upgrade django-cors-headers 

django == 2.2にダウングレードし、6つをインストールするだけで問題は解決しました。なぜcors-headersをアップグレードする必要があるのですか?
because_im_batman

1
djangoのバージョンを3.xにアップグレードした場合は、cors-headersのアップグレードを検討する必要があります。それも別の選択肢です。
Shedrack

6

まず、pipから6つをインストールします

pip install six

次に、settings.py

INSTALLED_APPS = [
  'six']

第三に、6を呼び出します

from six import text_type

私の作品では、Django 3.0.4を使用しています


5

django.utils.sixを使用するDjangoのライブラリとアドオンは多数ありますが、もちろん現在は壊れています。主な懸念事項は、mysql-connector-python(8.0.18)です。単純な解決策は、Djangoの外部のライブラリを使用することですが、これらのライブラリの作成者は変更を加える必要があります(または、自分で一時的に変更を加えることもできます... django.utils.sixを6に置き換えてください)。


4

私も同じ問題を抱えていました。

私の問題は使用していた:

pip install django_taggit==0.22.2

私がしたときにこれを解決しました:

pip install django_taggit==1.2.0

それが最新バージョンだからです。


2
この答えは役に立つかもしれませんが、他の人々がすでに他のパッケージのアップグレードを推奨しているので、元の投稿の下のコメントとしてより良いです。
DHerls

3

例外:

 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)

解決:

 vi /usr/local/lib/python3.8/dist-packages/timezone_field/fields.py

変化する:

from django.utils import six

に:

import six

2

Folksの理想的なソリューションは、アップグレードとクリーンな使用法ですが、困難な状況にある人々の回避策は十分に簡単です。

Djangoutilsの新しいファイルsix.pyを作成し、ファイルPUT内側:

import six

注:解決策ではありませんが、直ちにパッチを適用するための回避策


1

JSONFieldソリューション

使用jsonfieldしたjsonfiled2パッケージです。しかし、どちらの場合も、私は同じエラーに直面しました。

django-jsonfieldパッケージをインストールし、残りのパッケージ(jsonfieldに関連)をアンインストールすると、問題が解決しました。

# In case you have installed the following packages, otherwise ignore them.
pip uninstall jsonfield
pip uninstall jsonfield2

pip install django-jsonfield

使用法

from django.db import models
from jsonfield import JSONField

class ModelName(models.Model):
    json_field = JSONField()

0

django 3を使用している場合は、このコマンドを実行することをお勧めします

pip install six

これによれば

https://docs.djangoproject.com/en/3.0/releases/3.0/#re​​moved-private-python-2-compatibility-apis


ミッシングリンクを追加してください
Bemis

私は今のところ正確なlilnkを覚えていませんが、それはそのようなものだったと確信しています...とにかくありがとう;)
radkal2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.