Django 3.0.0最新バージョンを使用している場合、「django.utils」から「six」という名前のエラーをインポートできません


8

現在、Django 2.2のバージョンを3.0にアップグレードしたところ、突然次のようなエラーが発生しました。

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

トレースバックが以下のようになっていることを確認しました。

Traceback (most recent call last):
  File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\ptvsd_launcher.py", line 43, in <module>
    main(ptvsdArgs)
  File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 432, in main
    run()
  File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 316, in run_file
    runpy.run_path(target, run_name='__main__')
  File "C:\Python37\Lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Python37\Lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Python37\Lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\production\myproject\erp_project\manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "d:\production\myproject\venv\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "d:\production\myproject\venv\lib\site-packages\django\core\management\__init__.py", line 377, in execute
    django.setup()
  File "d:\production\myproject\venv\lib\site-packages\django\__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "d:\production\myproject\venv\lib\site-packages\django\apps\registry.py", line 92, in populate
    app_config = AppConfig.create(entry)
  File "d:\production\myproject\venv\lib\site-packages\django\apps\config.py", line 90, in create
    module = import_module(entry)
  File "d:\production\myproject\venv\lib\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 "d:\production\myproject\venv\lib\site-packages\post_office\__init__.py", line 3, in <module>
    from .backends import EmailBackend
  File "d:\production\myproject\venv\lib\site-packages\post_office\backends.py", line 6, in <module>
    from .settings import get_default_priority
  File "d:\production\myproject\venv\lib\site-packages\post_office\settings.py", line 101, in <module>
    context_field_class = import_attribute(CONTEXT_FIELD_CLASS)
  File "d:\production\myproject\venv\lib\site-packages\post_office\compat.py", line 45, in import_attribute
    module = importlib.import_module(module_name)
  File "d:\production\myproject\venv\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "d:\production\myproject\venv\lib\site-packages\jsonfield\__init__.py", line 1, in <module>
    from .fields import JSONField, JSONCharField  # noqa
  File "d:\production\myproject\venv\lib\site-packages\jsonfield\fields.py", line 21, in <module>
    from .encoder import JSONEncoder
  File "d:\production\myproject\venv\lib\site-packages\jsonfield\encoder.py", line 2, in <module>
    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)

私はフォルダーLib \ site-packages \ django \ utilsをチェックインしましたが、見つかりませんとsix.pyファイルですが、まだdjango.utilsからの行を含むLib \ site-packages \ jsonfield \ encode.pyからインポートしています6、インポートしようとしているタイムゾーン6つが見つかりません。

Lib \ site-packages \ django \ utilsフォルダーにsix.pyファイルを含む以前のバージョンのdjango。

これを解決する方法はありますか?


2
それはあなたですjsonfield、もはや見つけることができますジャンゴでモジュールを必要とするパッケージ。
Willem Van Onsem

どのDBを使用していますか?
Julien Kieffer

リリースノートに記載されているように、「django.utils.six-このベンダーライブラリの使用を削除するか、6に切り替えてください。」
Sayse

@WillemVanOnsem-これを修正するにはどうすればよいですか?すべてのパッケージの最新バージョンをインストールしたので、どんな考えでも。

回答:


6

短い答え:放棄したいかもしれませんdjango-jsonfield

トレースバックに基づいて、django-jsonfieldパッケージ[GitHub]を使用していますが、これは既知の問題[GitHub-issue]です。それはdjango.utils.sixモジュールに依存しますが、そのモジュールは削除されました。

現時点では、このようにと一緒に使用することはできません。このプロジェクトへの最後のコミットは2017年10月からであるため、おそらくプロジェクトは「アクティブ」ではなく、非常に長い時間がかかる可能性があります(またはまったくない)修正されます。の後継は ([GitHub])です。との互換性は、10月(2019年)のプルリクエストによって[GitHub-pr]に変更されました


1
jsonfield2は現在、はるかに優れたソリューションのように見えます。ありがとう。

すみません、django-jsonfieldをどのように破棄するのですか?
Phok Chanrithisak

今日これを見つけた人のために、jsonfield2アーカイブされてjsonfieldGitHub)にマージされました。
グレッグカレカ

5

6つのモジュールを使用するには、pipを使用して直接インストールし、それに応じてdjango-jsonfieldパッケージを変更します。つまり、パッケージ内にあるファイルを見つけて、from django.utils import sixで置き換えますimport six。その後、それは動作するはずです。私はdjango 3.0でdjongoを使用するときに同じ問題に直面しました。それぞれのファイルを見つけて、上記の提案に置き換えました。本番レベルまたはエンタープライズレベルのプロジェクトで作業している場合、これを行うことは決して推奨されないことに注意してください。ペットプロジェクトのためにやった。


これは私のために働きました
Irfan Harun

これも私の解決策でした!ありがとう。これがHerokuの本番環境でアプリを破壊しないことを願っています。
ホセルイスキチンボ

3

Django 3.0リリースノートで指定されたdjango.utils.sixは削除されました。必要な場合は、代わりにpypiパッケージを使用することをお勧めします

あなたの場合、jsonfieldパッケージはネイティブのDjangoのJSON Fieldに置き換えられるかもしれません。別の解決策はjsonfield、問題を解決するために自分でパッケージをフォークするか、プロジェクトのリポジトリにPRを作成することです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.