From 3de17b2fa6f008b43639f36923a419de107fd235 Mon Sep 17 00:00:00 2001 From: "Dr.Lt.Data" Date: Wed, 5 Mar 2025 12:55:39 +0900 Subject: [PATCH] improve: pip fixer - support missing comfyui_frontend_package fixing --- cm-cli.py | 16 ++++++++-------- glob/manager_core.py | 6 +++--- glob/manager_util.py | 19 ++++++++++++++++++- prestartup_script.py | 2 +- pyproject.toml | 2 +- 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/cm-cli.py b/cm-cli.py index 91279cee..e43ce032 100644 --- a/cm-cli.py +++ b/cm-cli.py @@ -647,7 +647,7 @@ def install( cmd_ctx.set_channel_mode(channel, mode) cmd_ctx.set_no_deps(no_deps) - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) for_each_nodes(nodes, act=install_node) pip_fixer.fix_broken() @@ -685,7 +685,7 @@ def reinstall( cmd_ctx.set_channel_mode(channel, mode) cmd_ctx.set_no_deps(no_deps) - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) for_each_nodes(nodes, act=reinstall_node) pip_fixer.fix_broken() @@ -739,7 +739,7 @@ def update( if 'all' in nodes: asyncio.run(auto_save_snapshot()) - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) for x in nodes: if x.lower() in ['comfyui', 'comfy', 'all']: @@ -840,7 +840,7 @@ def fix( if 'all' in nodes: asyncio.run(auto_save_snapshot()) - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) for_each_nodes(nodes, fix_node, allow_all=True) pip_fixer.fix_broken() @@ -1119,7 +1119,7 @@ def restore_snapshot( print(f"[bold red]ERROR: `{snapshot_path}` is not exists.[/bold red]") exit(1) - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) try: asyncio.run(core.restore_snapshot(snapshot_path, extras)) except Exception: @@ -1151,7 +1151,7 @@ def restore_dependencies( total = len(node_paths) i = 1 - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) for x in node_paths: print("----------------------------------------------------------------------------------------------------") print(f"Restoring [{i}/{total}]: {x}") @@ -1170,7 +1170,7 @@ def post_install( ): path = os.path.expanduser(path) - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) unified_manager.execute_install_script('', path, instant_execution=True) pip_fixer.fix_broken() @@ -1215,7 +1215,7 @@ def install_deps( exit(1) - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) for k in json_obj['custom_nodes'].keys(): state = core.simple_check_custom_node(k) if state == 'installed': diff --git a/glob/manager_core.py b/glob/manager_core.py index cf5fd76d..5b54266b 100644 --- a/glob/manager_core.py +++ b/glob/manager_core.py @@ -42,7 +42,7 @@ import manager_downloader from node_package import InstalledNodePackage -version_code = [3, 27, 11] +version_code = [3, 28] version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '') @@ -828,7 +828,7 @@ class UnifiedManager: else: if os.path.exists(requirements_path) and not no_deps: print("Install: pip packages") - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) res = True lines = manager_util.robust_readlines(requirements_path) for line in lines: @@ -1883,7 +1883,7 @@ def execute_install_script(url, repo_path, lazy_mode=False, instant_execution=Fa else: if os.path.exists(requirements_path) and not no_deps: print("Install: pip packages") - pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) + pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) with open(requirements_path, "r") as requirements_file: for line in requirements_file: #handle comments diff --git a/glob/manager_util.py b/glob/manager_util.py index 2bf484c0..1a6aed1c 100644 --- a/glob/manager_util.py +++ b/glob/manager_util.py @@ -276,8 +276,9 @@ torch_torchvision_torchaudio_version_map = { class PIPFixer: - def __init__(self, prev_pip_versions): + def __init__(self, prev_pip_versions, comfyui_path): self.prev_pip_versions = { **prev_pip_versions } + self.comfyui_path = comfyui_path def torch_rollback(self): spec = self.prev_pip_versions['torch'].split('+') @@ -376,6 +377,22 @@ class PIPFixer: logging.error("[ComfyUI-Manager] Failed to restore numpy") logging.error(e) + # fix missing frontend + try: + front = new_pip_versions.get('comfyui_frontend_package') + if front is None: + requirements_path = os.path.join(self.comfyui_path, 'requirements.txt') + + with open(requirements_path, 'r') as file: + lines = file.readlines() + + front_line = next((line.strip() for line in lines if line.startswith('comfyui-frontend-package')), None) + cmd = make_pip_cmd(['install', front_line]) + subprocess.check_output(cmd , universal_newlines=True) + except Exception as e: + logging.error("[ComfyUI-Manager] Failed to restore comfyui_frontend_package") + logging.error(e) + def sanitize(data): return data.replace("<", "<").replace(">", ">") diff --git a/prestartup_script.py b/prestartup_script.py index f3a4cc4c..074ae8fb 100644 --- a/prestartup_script.py +++ b/prestartup_script.py @@ -507,7 +507,7 @@ check_bypass_ssl() # Perform install processed_install = set() script_list_path = os.path.join(folder_paths.user_directory, "default", "ComfyUI-Manager", "startup-scripts", "install-scripts.txt") -pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages()) +pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages(), comfy_path) def is_installed(name): diff --git a/pyproject.toml b/pyproject.toml index d4fa403e..7bcd1e5b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "comfyui-manager" description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI." -version = "3.27.11" +version = "3.28" license = { file = "LICENSE.txt" } dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions", "toml", "uv", "chardet"]