""" Initalises the launchers virtual environment, and installs all dependancies. """ import subprocess as sp import platform import shutil import sys import os def getVenvExec(): """ Gets the path of the virtual environment based on the current opperating system. """ plat = platform.system() if plat == 'Linux': return f'./.venv/bin/python3' elif plat == 'Windows': return f'./.venv/Scripts/python.exe' else: print(f'WARNING: Playform type "{plat}" is not recognised. Exiting...') exit(1) def inputYN(prompt: str, default=None): """ A simply yes/no prompt. """ while True: i = input(prompt) if i.lower() in ['y', 'yes', '1', 'true']: return True elif i.lower() in ['n', 'no', '0', 'false']: return False elif i == '' and default != None: return default def installRequirements(requirementsPath: str): """ Installs a requirements.txt file to the current venv. """ print(f'---------- Installing {requirementsPath} ----------') sp.run([getVenvExec(), '-m', 'pip', 'install', '-r', requirementsPath]) # Check for a pre-existing venv if os.path.isdir('./.venv/'): # If one exists, ask the user if they want to delete it replace = inputYN(f'Virtual environment already exists, would you like to replace it? (y/n) > ') if replace: # If so, remove the .venv directory print(f'---------- Removing old virtual environment ----------') shutil.rmtree('./.venv/') # Initailise a venv, creating one if it doesn't exist print(f'---------- Initalising virtual environment ----------') sp.run([sys.executable, '-m', 'venv', './.venv/']) # Upgrade pip print(f'---------- Upgrading pip ----------') sp.run([getVenvExec(), '-m', 'pip', 'install', '-U', 'pip']) # Install all requirements.txt files for path in os.listdir('../'): requirementsPath = os.path.join('../', path, 'requirements.txt') if not os.path.isfile(requirementsPath): print(f'{path} does not have a requirements.txt, skipping...') continue installRequirements(requirementsPath) if os.path.isfile('../players.json'): newPlayerJSON = inputYN(f'player.json already exists, would you like to overwrite it? (y/n) > ') else: newPlayerJSON = True if newPlayerJSON: print(f'---------- Copying example players.json ----------') shutil.copyfile('../NoPELib/players.json', '../players.json')