import argparse import subprocess import shutil import yaml from pathlib import Path def install_backend(backend_name): # Load the list of available backends from backendlist.yaml with open('backendlist.yaml', 'r') as f: backend_list = yaml.safe_load(f) # Get the Github repository URL for the selected backend try: backend_url = backend_list[backend_name] except KeyError: print(f"Backend '{backend_name}' not found in backendlist.yaml") return # Clone the Github repository to a tmp folder tmp_folder = Path('tmp') if tmp_folder.exists(): shutil.rmtree(tmp_folder) subprocess.run(['git', 'clone', backend_url, tmp_folder]) # Install the requirements.txt from the cloned project requirements_file = tmp_folder / 'requirements.txt' subprocess.run(['pip', 'install', '-r', str(requirements_file)]) # Copy the folder found inside the binding to ../backends folders = [f for f in tmp_folder.iterdir() if f.is_dir() and not f.stem.startswith(".")] src_folder = folders[0] dst_folder = Path('../backends') / src_folder.stem print(f"coipying from {src_folder} to {dst_folder}") # Delete the destination directory if it already exists if dst_folder.exists(): shutil.rmtree(dst_folder) shutil.copytree(src_folder, dst_folder) # Create an empty folder in ../models with the same name models_folder = Path('../models') models_folder.mkdir(exist_ok=True) (models_folder / backend_name).mkdir(exist_ok=True, parents=True) if tmp_folder.exists(): shutil.rmtree(tmp_folder) if __name__ == '__main__': # Load the list of available backends from backendlist.yaml with open('backendlist.yaml', 'r') as f: backend_list = yaml.safe_load(f) # Print the list of available backends and prompt the user to select one print("Available backends:") for backend_id, backend_name in enumerate(backend_list): print(f" {backend_id} - {backend_name}") backend_id = int(input("Select a backend to install: ")) install_backend(list(backend_list.keys())[backend_id])