2024-01-21 20:16:19 -06:00
|
|
|
# Sebastian Raschka, 2024
|
2023-07-23 13:18:13 -05:00
|
|
|
|
|
|
|
from os.path import dirname, join, realpath
|
|
|
|
from packaging.version import parse as version_parse
|
|
|
|
import platform
|
|
|
|
import sys
|
|
|
|
|
|
|
|
if version_parse(platform.python_version()) < version_parse('3.9'):
|
|
|
|
print('[FAIL] We recommend Python 3.9 or newer but'
|
|
|
|
' found version %s' % (sys.version))
|
|
|
|
else:
|
|
|
|
print('[OK] Your Python version is %s' % (platform.python_version()))
|
|
|
|
|
|
|
|
|
|
|
|
def get_packages(pkgs):
|
|
|
|
versions = []
|
|
|
|
for p in pkgs:
|
|
|
|
try:
|
|
|
|
imported = __import__(p)
|
|
|
|
try:
|
|
|
|
versions.append(imported.__version__)
|
|
|
|
except AttributeError:
|
|
|
|
try:
|
|
|
|
versions.append(imported.version)
|
|
|
|
except AttributeError:
|
|
|
|
try:
|
|
|
|
versions.append(imported.version_info)
|
2024-01-21 20:16:19 -06:00
|
|
|
except:
|
|
|
|
try:
|
|
|
|
import importlib, importlib_metadata
|
|
|
|
imported = importlib.import_module(p)
|
|
|
|
version = importlib_metadata.version(p)
|
|
|
|
versions.append(version)
|
|
|
|
except ImportError:
|
|
|
|
version = "not installed"
|
|
|
|
versions.append('0.0')
|
2023-07-23 13:18:13 -05:00
|
|
|
except ImportError:
|
|
|
|
print(f'[FAIL]: {p} is not installed and/or cannot be imported.')
|
|
|
|
versions.append('N/A')
|
|
|
|
return versions
|
|
|
|
|
|
|
|
|
|
|
|
def get_requirements_dict():
|
|
|
|
PROJECT_ROOT = dirname(realpath(__file__))
|
2024-03-18 08:00:49 -05:00
|
|
|
PROJECT_ROOT_UP_TWO = dirname(dirname(PROJECT_ROOT))
|
|
|
|
REQUIREMENTS_FILE = join(PROJECT_ROOT_UP_TWO, "requirements.txt")
|
2023-07-23 13:18:13 -05:00
|
|
|
d = {}
|
|
|
|
with open(REQUIREMENTS_FILE) as f:
|
|
|
|
for line in f:
|
2024-03-18 08:00:49 -05:00
|
|
|
if not line.strip():
|
|
|
|
continue
|
|
|
|
line = line.split("#")[0]
|
|
|
|
print(line)
|
2023-07-23 13:18:13 -05:00
|
|
|
line = line.split(" ")
|
2024-03-18 08:00:49 -05:00
|
|
|
if not line[0].strip() or not line[-1].strip():
|
|
|
|
continue
|
2023-07-23 13:18:13 -05:00
|
|
|
d[line[0]] = line[-1]
|
|
|
|
return d
|
|
|
|
|
|
|
|
|
|
|
|
def check_packages(d):
|
|
|
|
versions = get_packages(d.keys())
|
|
|
|
|
|
|
|
for (pkg_name, suggested_ver), actual_ver in zip(d.items(), versions):
|
|
|
|
if actual_ver == 'N/A':
|
|
|
|
continue
|
|
|
|
actual_ver, suggested_ver = version_parse(actual_ver), version_parse(suggested_ver)
|
|
|
|
if actual_ver < suggested_ver:
|
|
|
|
print(f'[FAIL] {pkg_name} {actual_ver}, please upgrade to >= {suggested_ver}')
|
|
|
|
else:
|
|
|
|
print(f'[OK] {pkg_name} {actual_ver}')
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
d = get_requirements_dict()
|
|
|
|
check_packages(d)
|