diff options
Diffstat (limited to 'src/mlia/utils/py_manager.py')
-rw-r--r-- | src/mlia/utils/py_manager.py | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/src/mlia/utils/py_manager.py b/src/mlia/utils/py_manager.py index 5f98fcc..d7821d3 100644 --- a/src/mlia/utils/py_manager.py +++ b/src/mlia/utils/py_manager.py @@ -3,10 +3,16 @@ """Util functions for managing python packages.""" from __future__ import annotations +import logging +import subprocess # nosec import sys from importlib.metadata import distribution from importlib.metadata import PackageNotFoundError -from subprocess import check_call # nosec + +from mlia.core.errors import InternalError + + +logger = logging.getLogger(__name__) class PyPackageManager: @@ -45,16 +51,29 @@ class PyPackageManager: """Execute pip command.""" assert sys.executable, "Unable to launch pip command" - check_call( - [ - sys.executable, - "-m", - "pip", - "--disable-pip-version-check", - subcommand, - *params, - ] - ) + try: + output = subprocess.check_output( # nosec + [ + sys.executable, + "-m", + "pip", + "--disable-pip-version-check", + subcommand, + *params, + ], + stderr=subprocess.STDOUT, + text=True, + ) + returncode = 0 + except subprocess.CalledProcessError as err: + output = err.output + returncode = err.returncode + + for line in output.splitlines(): + logger.debug(line.rstrip()) + + if returncode != 0: + raise InternalError("Unable to install python package") def get_package_manager() -> PyPackageManager: |