Archipelago/ModuleUpdate.py

56 lines
2.2 KiB
Python
Raw Normal View History

import os
2020-01-18 14:45:52 +00:00
import sys
import subprocess
import importlib
if sys.version_info < (3, 8, 6):
raise RuntimeError("Incompatible Python Version. 3.8.7+ is supported.")
update_ran = hasattr(sys, "frozen") and getattr(sys, "frozen") # don't run update if environment is frozen/compiled
2020-01-18 14:45:52 +00:00
def update_command():
subprocess.call([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt', '--upgrade'])
2020-08-23 10:06:00 +00:00
naming_specialties = {"PyYAML": "yaml", # PyYAML is imported as the name yaml
"maseya-z3pr": "maseya"}
2020-01-18 14:45:52 +00:00
def update():
global update_ran
if not update_ran:
update_ran = True
2020-03-06 22:30:18 +00:00
path = os.path.join(os.path.dirname(sys.argv[0]), 'requirements.txt')
if not os.path.exists(path):
2020-07-11 14:54:38 +00:00
path = os.path.join(os.path.dirname(__file__), 'requirements.txt')
2020-03-06 22:30:18 +00:00
with open(path) as requirementsfile:
2020-01-18 14:45:52 +00:00
for line in requirementsfile.readlines():
2020-03-06 22:37:57 +00:00
module, remote_version = line.split(">=")
module = naming_specialties.get(module, module)
2020-01-18 14:45:52 +00:00
try:
module = importlib.import_module(module)
except:
import traceback
traceback.print_exc()
input(f'Required python module {module} not found, press enter to install it')
update_command()
return
2020-01-18 14:45:52 +00:00
else:
if hasattr(module, "__version__"):
module_version = module.__version__
2020-03-06 22:37:57 +00:00
module = module.__name__ # also unloads the module to make it writable
2020-01-18 14:45:52 +00:00
if type(module_version) == str:
module_version = tuple(int(part.strip()) for part in module_version.split("."))
2020-03-06 22:37:57 +00:00
remote_version = tuple(int(part.strip()) for part in remote_version.split("."))
if module_version < remote_version:
2020-03-06 22:38:41 +00:00
input(f'Required python module {module} is outdated ({module_version}<{remote_version}),'
' press enter to upgrade it')
2020-01-18 14:45:52 +00:00
update_command()
return
2020-01-18 14:45:52 +00:00
2020-03-06 22:37:57 +00:00
2020-01-18 14:45:52 +00:00
if __name__ == "__main__":
update()