web-dev-qa-db-ja.com

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

現在、Djangoのバージョンを2.0.6から3.0にアップグレードしています。 と突然python manage.py Shellコマンドを呼び出した後、このエラーが発生しました:

ImportError: 'Django.utils'(/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

同様の質問:

私はこれ Question および Django-3.release note を読みましたが、それらのリソースは私を助けることができませんでした。

43

Django 3.0.0リリースノートでは、特定の private 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でした。これがこの問題に遭遇した他の人を助けることを願っています。

25
Brand0R

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

Django-3.リリースノート から、

_Django.utils.six_-このベンダーライブラリの使用を削除するか、 six に切り替えます。

つまり、_Django.utils.six_モジュールがDjango-3. 以降から削除されました。


私のコードベースが「_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-headers__Django-jsonfield_ などの一部のサードパーティパッケージが原因でエラーが発生した場合=など対応するパッケージバージョンを最新バージョンにアップグレード

コードベースが原因でエラーが発生した場合は、_Django.utils.six_モジュールの代わりに six パッケージを使用します

17
JPG

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

pip install --upgrade Django-cors-headers

このImportErrorを回避するために、djangorestframeworkdrf_yasgもアップグレードしました。

5
Jun Zhou

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

pip3 install six
pip3 install --upgrade Django-cors-headers 
5
Shedrack

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

4
Lee Harding

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

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

pip install Django_taggit==0.22.2

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

pip install Django_taggit==1.2.0

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

2
Nataliia

例外:

 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

To:

import six
1
Kevin

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

pip install six

次に、settings.py

INSTALLED_APPS = [
  'six']

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

from six import text_type

私の作品では、Django 3.0.4

1
Diego Bianchi

JSONField Solution

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()
1
Mostafa Ghadimi

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

pip install six

これによれば

0
radkal2

フォークの理想的な解決策はpgradeでクリーンな使用法ですが、困難な海峡にいる人々の回避策は簡単です。

Django utilsに新しいファイルsix.pyを作成し、ファイル内に次のように配置します。

import six

注:解決策ではありませんが、即時パッチの回避策

0
AMIT ARORA