Skip to content

Commit ffbf0e8

Browse files
committed
Detect user-requested package names by preparing
This always prepares each explicit requirements when the resolver is run, instead of when they are being resolved. But we always want to prepare them anyway (an explicit requirement has only one candidate, so it's either do or die), so this is not really a problem.
1 parent b441f48 commit ffbf0e8

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

news/9204.bugfix.rst

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
New resolver: Detect an unnamed requirement is user-specified (by building its
2+
metadata for the project name) so it can be correctly ordered in the resolver.

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

+5-6
Original file line numberDiff line numberDiff line change
@@ -473,16 +473,15 @@ def collect_root_requirements(self, root_ireqs):
473473
else:
474474
collected.constraints[name] = Constraint.from_ireq(ireq)
475475
else:
476-
if ireq.user_supplied and ireq.name:
477-
canonical_name = canonicalize_name(ireq.name)
478-
if canonical_name not in collected.user_requested:
479-
collected.user_requested[canonical_name] = i
480476
req = self._make_requirement_from_install_req(
481477
ireq,
482478
requested_extras=(),
483479
)
484-
if req is not None:
485-
collected.requirements.append(req)
480+
if req is None:
481+
continue
482+
if ireq.user_supplied and req.name not in collected.user_requested:
483+
collected.user_requested[req.name] = i
484+
collected.requirements.append(req)
486485
return collected
487486

488487
def make_requirement_from_candidate(self, candidate):

0 commit comments

Comments
 (0)