From 7e301e2a067d41cba9b8ef357496dd1df94e4cdd Mon Sep 17 00:00:00 2001 From: melMass Date: Sat, 22 Jul 2023 03:45:05 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20install=20logic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.py | 131 ++++++++++++++++++++++++++--------------------- requirements.txt | 3 -- 2 files changed, 74 insertions(+), 60 deletions(-) diff --git a/install.py b/install.py index 2104c77..c67570e 100644 --- a/install.py +++ b/install.py @@ -15,6 +15,21 @@ import shutil here = Path(__file__).parent wheels_directory = here / "wheels" +executable = sys.executable + +# - detect mode +mode = None +if os.environ.get("COLAB_GPU"): + mode = "colab" +elif "python_embeded" in executable: + mode = "embeded" +elif ".venv" in executable: + mode = "venv" + + +if mode == None: + mode = "unknown" + # region ansi # ANSI escape sequences for text styling ANSI_FORMATS = { @@ -109,6 +124,7 @@ except ImportError: print_formatted("Installing tqdm...", "italic", color="yellow") subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", "tqdm"]) from tqdm import tqdm +import importlib pip_map = { @@ -154,78 +170,81 @@ def download_file(url, file_name): progress_bar.update(len(chunk)) -from typing import Union, Literal - - -def detect_mode() -> ( - Union[Literal["colab"], Literal["embeded"] | Literal["venv"], None] -): - if os.environ.get("COLAB_GPU"): - return "colab" - executable = sys.executable - if "python_embeded" in executable: - return "embeded" - if ".venv" in executable: - return "venv" - - -# Install dependencies from requirements.txt -def install_dependencies(dry=False): - with open("requirements.txt", "r") as requirements_file: +def get_requirements(path): + with open(path, "r") as requirements_file: requirements_txt = requirements_file.read() try: parsed_requirements = requirements.parse(requirements_txt) except AttributeError: print_formatted( - "Failed to parse requirements.txt. Please make sure the file is correctly formatted.", + f"Failed to parse {path}. Please make sure the file is correctly formatted.", "bold", color="red", ) return + return parsed_requirements + + +def import_or_install(requirement, dry=False): + dependency = requirement.name.strip() + import_name = pip_map.get(dependency, dependency) + + pip_name = dependency + if specs := requirement.specs: + pip_name += "".join(specs[0]) + + try: + import_module(import_name) + print_formatted( + f"Package {pip_name} already installed (import name: '{import_name}').", + "bold", + color="green", + ) + except ImportError: + if dry: + print_formatted( + f"Dry-run: Package {pip_name} would be installed (import name: '{import_name}').", + color="yellow", + ) + else: + try: + subprocess.check_call( + [sys.executable, "-m", "pip", "install", pip_name] + ) + print_formatted( + f"Package {pip_name} installed successfully using pip package name (import name: '{import_name}')", + "bold", + color="green", + ) + except subprocess.CalledProcessError as e: + print_formatted( + f"Failed to install package {pip_name} using pip package name (import name: '{import_name}'). Error: {str(e)}", + "bold", + color="red", + ) + + +# Install dependencies from requirements.txt +def install_dependencies(dry=False): + parsed_requirements = get_requirements(here / "requirements.txt") + if not parsed_requirements: + return print_formatted( "Installing dependencies from requirements.txt...", "italic", color="yellow" ) for requirement in parsed_requirements: - dependency = requirement.name.strip() - import_name = pip_map.get(dependency, dependency) + import_or_install(requirement, dry=dry) - pip_name = dependency - if specs := requirement.specs: - pip_name += "".join(specs[0]) - - try: - import_module(import_name) - print_formatted( - f"Package {pip_name} already installed (import name: '{import_name}').", - "bold", - color="green", - ) - except ImportError: - if dry: - print_formatted( - f"Dry-run: Package {pip_name} would be installed (import name: '{import_name}').", - color="yellow", - ) - else: - try: - subprocess.check_call( - [sys.executable, "-m", "pip", "install", pip_name] - ) - print_formatted( - f"Package {pip_name} installed successfully using pip package name (import name: '{import_name}')", - "bold", - color="green", - ) - except subprocess.CalledProcessError as e: - print_formatted( - f"Failed to install package {pip_name} using pip package name (import name: '{import_name}'). Error: {str(e)}", - "bold", - color="red", - ) + if mode == "venv": + parsed_requirements = get_requirements(here / "requirements-wheels.txt") + if not parsed_requirements: + return + for requirement in parsed_requirements: + import_or_install(requirement, dry=dry) if __name__ == "__main__": @@ -252,11 +271,9 @@ if __name__ == "__main__": args = parser.parse_args() # Install dependencies from requirements.txt - if args.requirements: + if args.requirements or mode == "venv": install_dependencies(dry=args.dry) - mode = detect_mode() - if not args.wheels and mode not in ["colab", "embeded"]: print_formatted( "Skipping wheel installation. Use --wheels to install wheel dependencies. (only needed for Comfy embed)", diff --git a/requirements.txt b/requirements.txt index abb3097..ce1906f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,9 +2,6 @@ onnxruntime-gpu==1.15.1 imageio===2.28.1 qrcode[pil] numpy==1.23.5 -insightface==0.7.3 -mmcv==2.0.0 -mmdet==3.0.0 rembg==2.0.37 facexlib==0.3.0 basicsr==1.4.2