Spaces:
Running
Running
| """ | |
| DEPRECATED: This module is no longer used in the project after v1.0.0. | |
| This module contains the InstallationManager class, which is used to manage | |
| the installation of dependencies. | |
| """ | |
| import os | |
| import platform | |
| import subprocess | |
| from pathlib import Path | |
| import urllib.request | |
| class InstallationManager: | |
| """Class to manage the installation of dependencies""" | |
| def __init__(self): | |
| self.root_dir = Path.cwd() | |
| self.conda_dir = self.root_dir / "conda" | |
| self.env_name = "open_llm_vtuber" | |
| self.python_version = "3.10" | |
| # Platform specific settings | |
| self.platform = platform.system().lower() | |
| if self.platform == "windows": | |
| self.conda_executable = self.conda_dir / "Scripts" / "conda.exe" | |
| self.activate_script = self.conda_dir / "Scripts" / "activate.bat" | |
| else: | |
| self.conda_executable = self.conda_dir / "bin" / "conda" | |
| self.activate_script = self.conda_dir / "bin" / "activate" | |
| def download_miniconda(self): | |
| """Download appropriate Miniconda installer""" | |
| system = platform.system().lower() | |
| machine = platform.machine().lower() | |
| if system == "windows": | |
| url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe" | |
| installer = self.root_dir / "miniconda_installer.exe" | |
| elif system == "darwin": | |
| if machine == "arm64": | |
| url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh" | |
| else: | |
| url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh" | |
| installer = self.root_dir / "miniconda_installer.sh" | |
| else: # Linux | |
| if machine == "aarch64": | |
| url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh" | |
| else: | |
| url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh" | |
| installer = self.root_dir / "miniconda_installer.sh" | |
| print(f"Downloading Miniconda from {url}") | |
| urllib.request.urlretrieve(url, installer) | |
| return installer | |
| def install_miniconda(self, installer): | |
| """Install Miniconda to local directory""" | |
| if platform.system().lower() == "windows": | |
| subprocess.run( | |
| [str(installer), "/S", "/D=" + str(self.conda_dir)], check=True | |
| ) | |
| else: | |
| os.chmod(installer, 0o755) | |
| subprocess.run( | |
| ["bash", str(installer), "-b", "-p", str(self.conda_dir)], check=True | |
| ) | |
| # Clean up installer | |
| installer.unlink() | |
| def create_environment(self): | |
| """Create conda environment with Python 3.10""" | |
| subprocess.run( | |
| [ | |
| str(self.conda_executable), | |
| "create", | |
| "-y", | |
| "-n", | |
| self.env_name, | |
| f"python={self.python_version}", | |
| ], | |
| check=True, | |
| ) | |
| def install_conda_dependencies(self): | |
| """Install conda dependencies""" | |
| subprocess.run( | |
| [ | |
| str(self.conda_executable), | |
| "install", | |
| "-y", | |
| "-n", | |
| self.env_name, | |
| "ffmpeg", | |
| "git", | |
| ], | |
| check=True, | |
| ) | |
| def install_pip_dependencies(self): | |
| """Install pip dependencies""" | |
| # Activate environment first | |
| if platform.system().lower() == "windows": | |
| activate_cmd = f"call {self.activate_script} {self.env_name}" | |
| else: | |
| activate_cmd = f"source {self.activate_script} {self.env_name}" | |
| # Install requirements.txt | |
| pip_install_cmd = f"{activate_cmd} && pip install -r requirements.txt" | |
| pip_install_cmd += ( | |
| " && pip install torch torchaudio funasr modelscope huggingface_hub onnx" | |
| ) | |
| if platform.system().lower() == "windows": | |
| subprocess.run(pip_install_cmd, shell=True, check=True) | |
| else: | |
| subprocess.run(["bash", "-c", pip_install_cmd], check=True) | |
| def check_environment(self): | |
| """Check if 'open-llm-vtuber' environment exists and install if not""" | |
| result = subprocess.run( | |
| [str(self.conda_executable), "env", "list"], | |
| capture_output=True, | |
| text=True, | |
| check=True, | |
| ) | |
| if self.env_name not in result.stdout: | |
| self.create_environment() | |
| self.install_conda_dependencies() | |
| self.install_pip_dependencies() | |
| def setup(self): | |
| """Run complete setup process""" | |
| if not self.conda_dir.exists(): | |
| installer = self.download_miniconda() | |
| self.install_miniconda(installer) | |
| # Create environment if it doesn't exist | |
| self.check_environment() | |