File size: 2,676 Bytes
3de7bf6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
"""Anomalib install subcommand code."""
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
import logging
from pkg_resources import Requirement
from rich.console import Console
from rich.logging import RichHandler
from anomalib.cli.utils.installation import (
get_requirements,
get_torch_install_args,
parse_requirements,
)
logger = logging.getLogger("pip")
logger.setLevel(logging.WARNING) # setLevel: CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET
console = Console()
handler = RichHandler(
console=console,
show_level=False,
show_path=False,
)
logger.addHandler(handler)
def anomalib_install(option: str = "full", verbose: bool = False) -> int:
"""Install Anomalib requirements.
Args:
option (str | None): Optional-dependency to install requirements for.
verbose (bool): Set pip logger level to INFO
Raises:
ValueError: When the task is not supported.
Returns:
int: Status code of the pip install command.
"""
from pip._internal.commands import create_command
requirements_dict = get_requirements("anomalib")
requirements = []
if option == "full":
for extra in requirements_dict:
requirements.extend(requirements_dict[extra])
elif option in requirements_dict:
requirements.extend(requirements_dict[option])
elif option is not None:
requirements.append(Requirement.parse(option))
# Parse requirements into torch and other requirements.
# This is done to parse the correct version of torch (cpu/cuda).
torch_requirement, other_requirements = parse_requirements(requirements, skip_torch=option not in ("full", "core"))
# Get install args for torch to install it from a specific index-url
install_args: list[str] = []
torch_install_args = []
if option in ("full", "core") and torch_requirement is not None:
torch_install_args = get_torch_install_args(torch_requirement)
# Combine torch and other requirements.
install_args = other_requirements + torch_install_args
# Install requirements.
with console.status("[bold green]Installing packages... This may take a few minutes.\n") as status:
if verbose:
logger.setLevel(logging.INFO)
status.stop()
console.log(f"Installation list: [yellow]{install_args}[/yellow]")
status_code = create_command("install").main(install_args)
if status_code == 0:
console.log(f"Installation Complete: {install_args}")
if status_code == 0:
console.print("Anomalib Installation [bold green]Complete.[/bold green]")
return status_code
|