10
10
from pip ._vendor .resolvelib .structs import DirectedGraph
11
11
12
12
from pip ._internal .cache import WheelCache
13
- from pip ._internal .exceptions import InstallationError
14
13
from pip ._internal .index .package_finder import PackageFinder
15
14
from pip ._internal .operations .prepare import RequirementPreparer
16
- from pip ._internal .req .req_install import (
17
- InstallRequirement ,
18
- check_invalid_constraint_type ,
19
- )
15
+ from pip ._internal .req .req_install import InstallRequirement
20
16
from pip ._internal .req .req_set import RequirementSet
21
17
from pip ._internal .resolution .base import BaseResolver , InstallRequirementProvider
22
18
from pip ._internal .resolution .resolvelib .provider import PipProvider
28
24
from pip ._internal .utils .filetypes import is_archive_file
29
25
from pip ._internal .utils .misc import dist_is_editable
30
26
31
- from .base import Candidate , Constraint , Requirement
27
+ from .base import Candidate , Requirement
32
28
from .factory import Factory
33
29
34
30
if TYPE_CHECKING :
@@ -77,41 +73,13 @@ def __init__(
77
73
78
74
def resolve (self , root_reqs , check_supported_wheels ):
79
75
# type: (List[InstallRequirement], bool) -> RequirementSet
80
-
81
- constraints = {} # type: Dict[str, Constraint]
82
- user_requested = {} # type: Dict[str, int]
83
- requirements = []
84
- for i , req in enumerate (root_reqs ):
85
- if req .constraint :
86
- # Ensure we only accept valid constraints
87
- problem = check_invalid_constraint_type (req )
88
- if problem :
89
- raise InstallationError (problem )
90
- if not req .match_markers ():
91
- continue
92
- assert req .name , "Constraint must be named"
93
- name = canonicalize_name (req .name )
94
- if name in constraints :
95
- constraints [name ] &= req
96
- else :
97
- constraints [name ] = Constraint .from_ireq (req )
98
- else :
99
- if req .user_supplied and req .name :
100
- canonical_name = canonicalize_name (req .name )
101
- if canonical_name not in user_requested :
102
- user_requested [canonical_name ] = i
103
- r = self .factory .make_requirement_from_install_req (
104
- req , requested_extras = ()
105
- )
106
- if r is not None :
107
- requirements .append (r )
108
-
76
+ collected = self .factory .collect_root_requirements (root_reqs )
109
77
provider = PipProvider (
110
78
factory = self .factory ,
111
- constraints = constraints ,
79
+ constraints = collected . constraints ,
112
80
ignore_dependencies = self .ignore_dependencies ,
113
81
upgrade_strategy = self .upgrade_strategy ,
114
- user_requested = user_requested ,
82
+ user_requested = collected . user_requested ,
115
83
)
116
84
if "PIP_RESOLVER_DEBUG" in os .environ :
117
85
reporter = PipDebuggingReporter () # type: BaseReporter
@@ -125,13 +93,13 @@ def resolve(self, root_reqs, check_supported_wheels):
125
93
try :
126
94
try_to_avoid_resolution_too_deep = 2000000
127
95
result = self ._result = resolver .resolve (
128
- requirements , max_rounds = try_to_avoid_resolution_too_deep
96
+ collected . requirements , max_rounds = try_to_avoid_resolution_too_deep
129
97
)
130
98
131
99
except ResolutionImpossible as e :
132
100
error = self .factory .get_installation_error (
133
101
cast ("ResolutionImpossible[Requirement, Candidate]" , e ),
134
- constraints ,
102
+ collected . constraints ,
135
103
)
136
104
raise error from e
137
105
0 commit comments