Skip to content

Commit 70f4d92

Browse files
committed
Prefer upper bounded requirements
1 parent 15d3833 commit 70f4d92

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

src/pip/_internal/resolution/resolvelib/provider.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,20 @@ def get_preference(
147147
else:
148148
_icandidates, ireqs = (), ()
149149

150-
operators = [
151-
specifier.operator
150+
operators_versions = [
151+
(specifier.operator, specifier.version)
152152
for specifier_set in (ireq.specifier for ireq in ireqs if ireq)
153153
for specifier in specifier_set
154154
]
155-
156-
pinned = any(op in ("==", "===") for op in operators)
157-
unfree = bool(operators)
155+
upper_bound = any(
156+
op in ("<", "<=", "~=") or (op == "==" and "*" in ver)
157+
for op, ver in operators_versions
158+
)
159+
pinned = any(
160+
op == "===" or (op == "==" and "*" not in ver)
161+
for op, ver in operators_versions
162+
)
163+
unfree = bool(operators_versions)
158164

159165
if identifier in self._user_requested:
160166
requested_order: float = self._user_requested[identifier]
@@ -184,6 +190,7 @@ def get_preference(
184190
return (
185191
not requires_python,
186192
not pinned,
193+
not upper_bound,
187194
not backtrack_cause,
188195
inferred_depth,
189196
requested_order,

0 commit comments

Comments
 (0)