import os import subprocess import shutil import re from typing import Tuple, Optional def check_flask_sqlalchemy_version()-> bool: flask_sqlalchemy_version = (1, 0, 0) lib_path = "/www/server/panel/pyenv/lib/python3.7/site-packages/" flask_sqlalchemy_path_list = [] try: for i in os.listdir(lib_path): path = os.path.join(lib_path, i) if not os.path.isdir(path): continue name = i.lower() if name.startswith("flask_sqlalchemy-") or name == "flask_sqlalchemy": flask_sqlalchemy_path_list.append(path) if name == "flask_sqlalchemy": file = os.path.join(path, "__init__.py") if not os.path.isfile(file): continue with open(file, "r") as f: for line in f: if line.startswith("__version__"): ver = re.search(r"(\d+\.\d+(\.\d+)?)", line).group() ver_list = ver.split(".") if len(ver_list) < 3: for _ in range(3 - len(ver_list)): ver_list.append("0") flask_sqlalchemy_version = tuple(int(i) for i in ver_list) except: import traceback print(traceback.format_exc(), flush=True) pass pip_bin = "/www/server/panel/pyenv/bin/pip" if flask_sqlalchemy_version != (2, 5, 1): try: if flask_sqlalchemy_path_list: for path in flask_sqlalchemy_path_list: shutil.rmtree(path) subprocess.call( "{pip_bin} install Flask-SQLAlchemy==2.5.1 SQLAlchemy==1.3.24".format(pip_bin=pip_bin), shell=True ) except: import traceback print(traceback.format_exc(), flush=True) return False return True