Django plugin 内で互換性の維持のためにDjango のバージョン判定を行なっている場合があります。
Django 自体のバージョンアップを行った後に動作確認しているとこの互換性問題で落ちることがあり、バージョン判定方法を調べてみました。
参考
バージョン取得
参考サイトのコードのそのままですが、django.VERSION
や、djang.utils.version
パッケージの関数でバージョン情報を取得できます。
import sys
sys.path.append('./jupyter/.env_jupyter/lib/python3.7/site-packages')
import django
from django.utils import version
print(django.VERSION)
print(django.get_version())
print(version.get_complete_version())
print(version.get_version())
(3, 2, 12, 'final', 0)
3.2.12
(3, 2, 12, 'final', 0)
3.2.12
django/version.py at main · django/django
を確認すると、djago.VERSION
が実態としては使用されていることがわかります。
def get_complete_version(version=None):
"""
Return a tuple of the django version. If version argument is non-empty,
check for correctness of the tuple provided.
"""
if version is None:
from django import VERSION as version
else:
assert len(version) == 5
assert version[3] in ("alpha", "beta", "rc", "final")
return version
Django plugin でのバージョン判定
Django は ゆるいsemver らしいです。
セマンティック バージョニング 2.0.0 | Semantic Versioning
以下のような判定が可能です。
マイナーバージョンで判定
from django import VERSION
# VERSIONを取得して、配列の2要素目を取り出すと、マイナーバージョンでの判定が可能
if VERSION[1] > (1):
print(VERSION[1])
print(VERSION)
else:
print(VERSION)
print(VERSION[1])
2
(3, 2, 12, 'final', 0)
メジャー、マイナーバージョンで判定
from django import VERSION
# VERSIONを取得して、配列の2要素目を取り出すと、マイナーバージョンでの判定が可能
if VERSION > (3, 1):
print(VERSION[1])
print(VERSION)
else:
print(VERSION)
print(VERSION[1])
2
(3, 2, 12, 'final', 0)
from django import VERSION
# VERSIONを取得して、配列の2要素目を取り出すと、マイナーバージョンでの判定が可能
if VERSION > (3, 3):
print(VERSION[1])
print(VERSION)
else:
print(VERSION)
print(VERSION[1])
(3, 2, 12, 'final', 0)
2
マイナーバージョンのみで判定だと、メジャーバージョンアップ時に問題が出る可能性があるので、
判定したとしても、メジャーか、メジャー、マイナーバージョンの組み合わせによる判定が安全に思いました。
以上です。
コメント