1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- # The following comment should be removed at some point in the future.
- # mypy: strict-optional=False
- from __future__ import absolute_import
- import logging
- from pip._internal.utils.logging import indent_log
- from pip._internal.utils.typing import MYPY_CHECK_RUNNING
- from .req_file import parse_requirements
- from .req_install import InstallRequirement
- from .req_set import RequirementSet
- if MYPY_CHECK_RUNNING:
- from typing import Any, List, Sequence
- __all__ = [
- "RequirementSet", "InstallRequirement",
- "parse_requirements", "install_given_reqs",
- ]
- logger = logging.getLogger(__name__)
- class InstallationResult(object):
- def __init__(self, name):
- # type: (str) -> None
- self.name = name
- def __repr__(self):
- # type: () -> str
- return "InstallationResult(name={!r})".format(self.name)
- def install_given_reqs(
- to_install, # type: List[InstallRequirement]
- install_options, # type: List[str]
- global_options=(), # type: Sequence[str]
- *args, # type: Any
- **kwargs # type: Any
- ):
- # type: (...) -> List[InstallationResult]
- """
- Install everything in the given list.
- (to be called after having downloaded and unpacked the packages)
- """
- if to_install:
- logger.info(
- 'Installing collected packages: %s',
- ', '.join([req.name for req in to_install]),
- )
- installed = []
- with indent_log():
- for requirement in to_install:
- if requirement.should_reinstall:
- logger.info('Attempting uninstall: %s', requirement.name)
- with indent_log():
- uninstalled_pathset = requirement.uninstall(
- auto_confirm=True
- )
- try:
- requirement.install(
- install_options,
- global_options,
- *args,
- **kwargs
- )
- except Exception:
- should_rollback = (
- requirement.should_reinstall and
- not requirement.install_succeeded
- )
- # if install did not succeed, rollback previous uninstall
- if should_rollback:
- uninstalled_pathset.rollback()
- raise
- else:
- should_commit = (
- requirement.should_reinstall and
- requirement.install_succeeded
- )
- if should_commit:
- uninstalled_pathset.commit()
- installed.append(InstallationResult(requirement.name))
- return installed
|