現在、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 を読みましたが、それらのリソースは私を助けることができませんでした。
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
でした。これがこの問題に遭遇した他の人を助けることを願っています。
_
Django.utils.six
_-このベンダーライブラリの使用を削除するか、 six に切り替えます。
つまり、_Django.utils.six
_モジュールがDjango-3. 以降から削除されました。
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
_
この例では、 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)
_
この例では 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)
_
この例では _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 パッケージを使用します
Mohammad Masoumiが述べたように、corsheaders
がDjango 3.0をサポートしているため、パッケージをアップグレードすると問題が解決します。
pip install --upgrade Django-cors-headers
このImportErrorを回避するために、djangorestframework
とdrf_yasg
もアップグレードしました。
Corsヘッダーパッケージを更新する必要があります。
pip3 install six
pip3 install --upgrade Django-cors-headers
Djangoには多数のライブラリとアドオンがあり、これらはもちろんDjango.utils.sixを使用していますが、現在は壊れています。懸念される主なものは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
それが最新バージョンだからです。
例外:
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
まず、pipから6つをインストールします
pip install six
次に、settings.py
INSTALLED_APPS = [
'six']
第三に、6を呼び出します
from six import text_type
私の作品では、Django 3.0.4
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()
Django 3を使用している場合は、このコマンドを実行することをお勧めします
pip install six
これによれば
フォークの理想的な解決策はpgradeでクリーンな使用法ですが、困難な海峡にいる人々の回避策は簡単です。
Django
utilsに新しいファイルsix.pyを作成し、ファイル内に次のように配置します。
import six
注:解決策ではありませんが、即時パッチの回避策