Django2.1あたり(メモしておらず正確には覚えていません)から[3.1.2]へバージョンアップすると、runserverができなくなりました。
現象が発生するのは特定の環境限定ですが、その原因と対策メモとなります。
エラーの内容
runserverを実行すると次のようなエラー文が表示されました。
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
File “C:\Users[name]\Anaconda3\lib\threading.py”, line 917, in bootstrap_inner self.run() File “C:\Users[name]\Anaconda3\lib\threading.py”, line 865, in run self._target(*self._args, *self._kwargs) File “C:\Users[name]\Anaconda3\lib\site-packages\django\utils\autoreload.py”, line 53, in wrapper fn(args, *kwargs) File “C:\Users[name]\Anaconda3\lib\site-packages\django\core\management\commands\runserver.py”, line 110, in inner_run autoreload.raise_last_exception() File “C:\Users[name]\Anaconda3\lib\site-packages\django\utils\autoreload.py”, line 76, in raise_last_exception raise _exception[1] File “C:\Users[name]\Anaconda3\lib\site-packages\django\core\management__init_.py”, line 357, in execute
autoreload.check_errors(django.setup)()
File “C:\Users[name]\Anaconda3\lib\site-packages\django\utils\autoreload.py”, line 53, in wrapper
fn(args, **kwargs)
File “C:\Users[name]\Anaconda3\lib\site-packages\django__init__.py”, line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File “C:\Users[name]\Anaconda3\lib\site-packages\django\apps\registry.py”, line 114, in populate
app_config.import_models()
File “C:\Users[name]\Anaconda3\lib\site-packages\django\apps\config.py”, line 211, in import_models
self.models_module = import_module(models_module_name)
File “C:\Users[name]\Anaconda3\lib\importlib__init__.py”, line 127, in import_module
return bootstrap._gcd_import(name[level:], package, level) File “”, line 1006, in _gcd_import File “”, line 983, in _find_and_load File “”, line 967, in _find_and_load_unlocked File “”, line 677, in _load_unlocked File “”, line 728, in exec_module File “”, line 219, in _call_with_frames_removed File “C:\Users[name]\Anaconda3\lib\site-packages\django\contrib\auth\models.py”, line 2, in from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager File “C:\Users[name]\Anaconda3\lib\site-packages\django\contrib\auth\base_user.py”, line 48, in class AbstractBaseUser(models.Model): File “C:\Users[name]\Anaconda3\lib\site-packages\django\db\models\base.py”, line 122, in new new_class.add_to_class(‘_meta’, Options(meta, app_label)) File “C:\Users[name]\Anaconda3\lib\site-packages\django\db\models\base.py”, line 326, in add_to_class value.contribute_to_class(cls, name) File “C:\Users[name]\Anaconda3\lib\site-packages\django\db\models\options.py”, line 206, in contribute_to_class self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) File “C:\Users[name]\Anaconda3\lib\site-packages\django\db__init_.py”, line 28, in getattr
return getattr(connections[DEFAULT_DB_ALIAS], item)
File “C:\Users[name]\Anaconda3\lib\site-packages\django\db\utils.py”, line 214, in getitem
backend = load_backend(db[‘ENGINE’])
File “C:\Users[name]\Anaconda3\lib\site-packages\django\db\utils.py”, line 111, in load_backend
return import_module(‘%s.base’ % backend_name)
File “C:\Users[name]\Anaconda3\lib\importlib__init__.py”, line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File “C:\Users[name]\Anaconda3\lib\site-packages\sql_server\pyodbc\base.py”, line 12, in
raise ImproperlyConfigured(“Django %d.%d.%d is not supported.” % VERSION[:3])
django.core.exceptions.ImproperlyConfigured: Django 3.1.2 is not supported.
原因
DjangoでSQL Serverへ接続するために設定していたODBCドライバ「django-pyodbc-azure」が、対応していないDjangoのバージョンだった為、エラー終了していました。
対策
ODBCドライバ「django-pyodbc-azure」が対応しているDjangoのバージョンへ戻す。
次の「django-pyodbc-azure」をインストールするコマンドを実行すると、自動的に対応しているDjangoのバージョンへ再インストールされるようです。
pip install django-pyodbc-azure
私の環境の場合Djangoのバージョン[3.1.2]から[2.1.15]へ戻されました。
解析
エラー構文の最後の方に次の一文があります。
File "C:\Users[name]\Anaconda3\lib\site-packages\sql_server\pyodbc\base.py", line 12, in
実際にファイルの箇所を開いてみるとまさにこれ!でした
if VERSION[:3] < (2,1,0) or VERSION[:2] >= (2,2):
raise ImproperlyConfigured("Django %d.%d.%d is not supported." % VERSION[:3])
バージョンが[2.1]未満で[2.2]以上の場合はエラー終了しています。
どうやら[2.1]台以外は対応していないようです。
さいごに
ここに至るまでに色々調べたり試行錯誤して時間を費やしました。
というのも同じ環境の人が少ないのか情報が全然ありませんでした。
SQLServerを使用すること自体がどんどん減っているんでしょうか?・・・
また分かったことが、SQLServerを使用しているとDjangoのバージョンが上げられないことになります。。。
方法があるのかもしれませんが、分かりません・・・
当面は困らないですが、問題が解決して新たな問題が判明した状態です。
このあたり分かればまた記事にしたいと思います!
コメント