]>
jfr.im git - dlqueue.git/blob - venv/lib/python3.11/site-packages/pip/_internal/req/__init__.py
3 from typing
import Generator
, List
, Optional
, Sequence
, Tuple
5 from pip
._internal
.utils
.logging
import indent_log
7 from .req_file
import parse_requirements
8 from .req_install
import InstallRequirement
9 from .req_set
import RequirementSet
18 logger
= logging
.getLogger(__name__
)
21 class InstallationResult
:
22 def __init__(self
, name
: str) -> None:
25 def __repr__(self
) -> str:
26 return f
"InstallationResult(name={self.name!r})"
29 def _validate_requirements(
30 requirements
: List
[InstallRequirement
],
31 ) -> Generator
[Tuple
[str, InstallRequirement
], None, None]:
32 for req
in requirements
:
33 assert req
.name
, f
"invalid to-be-installed requirement: {req}"
37 def install_given_reqs(
38 requirements
: List
[InstallRequirement
],
39 global_options
: Sequence
[str],
42 prefix
: Optional
[str],
43 warn_script_location
: bool,
46 ) -> List
[InstallationResult
]:
48 Install everything in the given list.
50 (to be called after having downloaded and unpacked the packages)
52 to_install
= collections
.OrderedDict(_validate_requirements(requirements
))
56 "Installing collected packages: %s",
57 ", ".join(to_install
.keys()),
63 for req_name
, requirement
in to_install
.items():
64 if requirement
.should_reinstall
:
65 logger
.info("Attempting uninstall: %s", req_name
)
67 uninstalled_pathset
= requirement
.uninstall(auto_confirm
=True)
69 uninstalled_pathset
= None
77 warn_script_location
=warn_script_location
,
78 use_user_site
=use_user_site
,
82 # if install did not succeed, rollback previous uninstall
83 if uninstalled_pathset
and not requirement
.install_succeeded
:
84 uninstalled_pathset
.rollback()
87 if uninstalled_pathset
and requirement
.install_succeeded
:
88 uninstalled_pathset
.commit()
90 installed
.append(InstallationResult(req_name
))