diff --git a/crates/uv-installer/src/site_packages.rs b/crates/uv-installer/src/site_packages.rs index 621fe7360..002657afb 100644 --- a/crates/uv-installer/src/site_packages.rs +++ b/crates/uv-installer/src/site_packages.rs @@ -266,6 +266,18 @@ impl SitePackages { requirements: &[UnresolvedRequirementSpecification], constraints: &[Requirement], ) -> Result { + // Collect the constraints. + let constraints: FxHashMap<&PackageName, Vec<&Requirement>> = + constraints + .iter() + .fold(FxHashMap::default(), |mut constraints, requirement| { + constraints + .entry(&requirement.name) + .or_default() + .push(requirement); + constraints + }); + let mut stack = Vec::with_capacity(requirements.len()); let mut seen = FxHashSet::with_capacity_and_hasher(requirements.len(), FxBuildHasher); @@ -306,8 +318,9 @@ impl SitePackages { } RequirementSatisfaction::Satisfied => {} } + // Validate that the installed version satisfies the constraints. - for constraint in constraints { + for constraint in constraints.get(&distribution.name()).into_iter().flatten() { match RequirementSatisfaction::check(distribution, &constraint.source)? { RequirementSatisfaction::Mismatch | RequirementSatisfaction::OutOfDate