Skip to content

Commit 2014c69

Browse files
authored
Do not prefer star specified package as though it were a pinned package
2 parents 5aeda3b + 18cae79 commit 2014c69

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

news/13252.bugfix.rst

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
When choosing a preferred requirement for resolving dependencies
2+
do not consider a specifier with a * in it, e.g. "==1.*", to be a
3+
pinned specifier.

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,14 @@ def get_preference(
142142
else:
143143
candidate, ireqs = None, ()
144144

145-
operators = [
146-
specifier.operator
145+
operators: list[tuple[str, str]] = [
146+
(specifier.operator, specifier.version)
147147
for specifier_set in (ireq.specifier for ireq in ireqs if ireq)
148148
for specifier in specifier_set
149149
]
150150

151151
direct = candidate is not None
152-
pinned = any(op[:2] == "==" for op in operators)
152+
pinned = any(((op[:2] == "==") and ("*" not in ver)) for op, ver in operators)
153153
unfree = bool(operators)
154154
requested_order = self._user_requested.get(identifier, math.inf)
155155

tests/unit/resolution_resolvelib/test_provider.py

+8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ def build_req_info(
5252
{},
5353
(True, False, False, True, math.inf, False, "pinned-package"),
5454
),
55+
# Star-specified package, i.e. with "*"
56+
(
57+
"star-specified-package",
58+
{"star-specified-package": [build_req_info("star-specified-package==1.*")]},
59+
[],
60+
{},
61+
(True, False, True, True, math.inf, False, "star-specified-package"),
62+
),
5563
# Package that caused backtracking
5664
(
5765
"backtrack-package",

0 commit comments

Comments
 (0)