| import install | |
| import subprocess | |
| import os | |
| import sys | |
| import importlib.util | |
| python = sys.executable | |
| git = os.environ.get("GIT", "git") | |
| index_url = os.environ.get("INDEX_URL", "") | |
| skip_install = False | |
| def run(command, desc=None, errdesc=None, custom_env=None): | |
| if desc is not None: | |
| print(desc) | |
| result = subprocess.run( | |
| command, | |
| stdout=subprocess.PIPE, | |
| stderr=subprocess.PIPE, | |
| shell=True, | |
| env=os.environ if custom_env is None else custom_env, | |
| ) | |
| if result.returncode != 0: | |
| message = f"""{errdesc or 'Error running command'}. | |
| Command: {command} | |
| Error code: {result.returncode} | |
| stdout: {result.stdout.decode(encoding="utf8", errors="ignore") if len(result.stdout)>0 else '<empty>'} | |
| stderr: {result.stderr.decode(encoding="utf8", errors="ignore") if len(result.stderr)>0 else '<empty>'} | |
| """ | |
| raise RuntimeError(message) | |
| return result.stdout.decode(encoding="utf8", errors="ignore") | |
| def check_run(command): | |
| result = subprocess.run( | |
| command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True | |
| ) | |
| return result.returncode == 0 | |
| def is_installed(package): | |
| try: | |
| spec = importlib.util.find_spec(package) | |
| except ModuleNotFoundError: | |
| return False | |
| return spec is not None | |
| def run_pip(args, desc=None): | |
| if skip_install: | |
| return | |
| index_url_line = f" --index-url {index_url}" if index_url != "" else "" | |
| return run( | |
| f'"{python}" -m pip {args} --prefer-binary{index_url_line}', | |
| desc=f"Installing {desc}", | |
| errdesc=f"Couldn't install {desc}", | |
| ) | |
| def run_python(code, desc=None, errdesc=None): | |
| return run(f'"{python}" -c "{code}"', desc, errdesc) | |
| def extract_arg(args, name): | |
| return [x for x in args if x != name], name in args | |
| if __name__ == "__main__": | |
| install.prepare_environment() | |
| from scripts import main | |
| main.launch() | |