diff --git a/MultiClient.py b/MultiClient.py index 5198d277..15e6b012 100644 --- a/MultiClient.py +++ b/MultiClient.py @@ -6,34 +6,37 @@ import shlex import subprocess import sys import urllib.parse - +import importlib import Items import Regions -while True: - try: - import aioconsole - break - except ImportError: - aioconsole = None - print('Required python module "aioconsole" not found, press enter to install it') - input() - subprocess.call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'aioconsole']) +def update_command(): + subprocess.call([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt', '--upgrade']) -while True: - try: - import websockets - break - except ImportError: - websockets = None - print('Required python module "websockets" not found, press enter to install it') - input() - subprocess.call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'websockets']) +with open('requirements.txt') as requirementsfile: + for line in requirementsfile.readlines(): + module, remoteversion = line.split(">=") + 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() + else: + if hasattr(module, "__version__"): + module_version = module.__version__ + module = module.__name__ #also unloads the module to make it writable + if type(module_version) == str: + module_version = tuple(int(part.strip()) for part in module_version.split(".")) + remoteversion = tuple(int(part.strip()) for part in remoteversion.split(".")) + if module_version < remoteversion: + input(f'Required python module {module} is outdated ({module_version}<{remoteversion}), press enter to upgrade it') + update_command() -try: - import colorama -except ImportError: - colorama = None +import aioconsole +import websockets +import colorama class ReceivedItem: def __init__(self, item, location, player): diff --git a/README.md b/README.md index 83a9ed4a..7cbe1538 100644 --- a/README.md +++ b/README.md @@ -9,15 +9,15 @@ Additions/Changes MultiMystery.py * Allows you to generate a Multiworld with individual player mystery weights. Since weights can also be set to 100%, this also allows for individual settings for each player in a regular multiworld. - * Basis is a .yaml file that sets these weights. You can find an easy.yaml in this project folder to get started. +Basis is a .yaml file that sets these weights. You can find an easy.yaml in this project folder to get started. * Additional instructions and settings are at the start of the file. Open with a text editor. MultiServer.py * Added a try/except to prevent malformed console commands from crashing the entire server * Added /hint command on the server (use just /hint for help on command) - * can be used as /hint Playername Itemname - * All Itemnames can be found in Items.py starting at line 25 - * example +can be used as /hint Playername Itemname +All Itemnames can be found in Items.py starting at line 25 +example: /hint Berserker Progressive Sword Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Hype Cave - Top in ahhdurr's World Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Blind's Hideout - Far Right in Schulzer's World @@ -27,8 +27,12 @@ Notice (Team #1): [Hint]: Berserker's Progressive Sword can be found in Ganons T Mystery.py * Fix fast_ganon not working at all currently * Defaults to generating a non-race ROM (Bonta's only makes race ROMs at this time) - * If a race ROM is desired, pass --create-race as argument to it +If a race ROM is desired, pass --create-race as argument to it * When an error is generated due to a broken .yaml file, it now mentions in the error trace which file it is MultiClient.py - * Update websockets if it is too old, preventing a crash when trying to connect \ No newline at end of file + * Update modules if they are too old, preventing a crash when trying to connect among potential other issues + * Autoinstall missing modules + +Project + * Allow newer versions of modules than specified, as they will *usually* not break compatibility \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 061dd9fe..e91084cc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -aioconsole==0.1.15 -colorama==0.4.3 -websockets==8.1 +aioconsole>=0.1.15 +colorama>=0.4.3 +websockets>=8.1