import os import sys import re from pathlib import Path import winreg '''Old function def detect_python_path(): path_list = os.environ['Path'].split(';') python_path = None python_version = None python_pattern = re.compile(r'python (3[.][0-9]+([.][0-9]+)?)?') for path in path_list: if 'python' in path.lower(): python_exec = Path(path) / 'python.exe' if python_exec.exists(): version_string = os.popen(f'"{python_exec}" --version').read().strip() match = python_pattern.search(version_string.lower()) if match: python_path = path python_version = match.group(1) break print(version_string) return python_path, python_version def modify_pyvenv_cfg(python_path, python_version): pyvenv_path = Path('.\\venv\\pyvenv.cfg') if not pyvenv_path.exists(): print("Error: pyvenv.cfg not found.") sys.exit(1) with pyvenv_path.open('r') as f: content = f.readlines() if len(content) != 1: print("Venv already created.") sys.exit(1) with pyvenv_path.open('w') as f: f.write(f"home = {python_path}\n") f.writelines(content) f.write(f"version = {python_version}\n") def create_venv(python_path, python_version): pyvenv_path = Path('.\\venv\\pyvenv.cfg') venv_path = Path('.\\venv') venv_abs_path = os.path.abspath(venv_path) if not pyvenv_path.exists(): print("Error: pyvenv.cfg not found.") sys.exit(1) with pyvenv_path.open('r') as f: content = f.readlines() home_line = None version_line = None for i, line in enumerate(content): if line.startswith("home ="): home_line = i if line.startswith("version ="): version_line = i with pyvenv_path.open('w') as f: if home_line is not None and version_line is not None: for i, line in enumerate(content): if i == home_line: f.write(f"home = {python_path}\n") elif i == version_line: f.write(f"version = {python_version}\n") else: f.write(line) else: f.write(f"home = {python_path}\n") f.writelines(content) f.write(f"version = {python_version}\n") with open(".\\venv\\Scripts\\activate", "r") as file: content = file.readlines() with open(".\\venv\\Scripts\\activate", "w") as file: for line in content: if line.startswith("VIRTUAL_ENV="): line = f"VIRTUAL_ENV=\"{venv_abs_path}\"\n" file.write(line) ''' def check_ffmpeg_path(): path_list = os.environ['Path'].split(';') ffmpeg_found = False for path in path_list: if 'ffmpeg' in path.lower() and 'bin' in path.lower(): ffmpeg_found = True print("FFmpeg already installed, skipping...") break return ffmpeg_found def add_ffmpeg_path_to_user_variable(): ffmpeg_bin_path = Path('.\\ffmpeg\\bin') if ffmpeg_bin_path.is_dir(): abs_path = str(ffmpeg_bin_path.resolve()) try: key = winreg.OpenKey( winreg.HKEY_CURRENT_USER, r"Environment", 0, winreg.KEY_READ | winreg.KEY_WRITE ) try: current_path, _ = winreg.QueryValueEx(key, "Path") if abs_path not in current_path: new_path = f"{current_path};{abs_path}" winreg.SetValueEx(key, "Path", 0, winreg.REG_EXPAND_SZ, new_path) print(f"Added FFmpeg path to user variable 'Path': {abs_path}") else: print("FFmpeg path already exists in the user variable 'Path'.") finally: winreg.CloseKey(key) except WindowsError: print("Error: Unable to modify user variable 'Path'.") sys.exit(1) else: print("Error: ffmpeg\\bin folder not found in the current path.") sys.exit(1) def main(): current_workdir_name = os.path.basename(os.getcwd()) if current_workdir_name != "so-vits-svc": print("请将整合包文件夹名称修改为so-vits-svc,否则可能会导致运行出错") sys.exit(1) else: if not check_ffmpeg_path(): add_ffmpeg_path_to_user_variable() if __name__ == "__main__": main()