mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 21:35:00 +00:00
uv-resolver: partially revert Requires-Python version narrowing
The PR #4707 introduced the notion of "version narrowing," where a Requires-Python constraint was _possibly_ narrowed whenever the universal resolver created a fork. The version narrowing would occur when the fork was a result of a marker expression on `python_version` that is *stricter* than the configured `Requires-Python` (via, say, `pyproject.toml`). The crucial conceptual change made by #4707 is therefore that `Requires-Python` is no longer an invariant configuration of resolution, but rather a mutable constraint that can vary from fork to fork. This in turn can result in some cases, such as in #4885, where different versions of dependencies are selected. We aren't sure whether we can fix those or not, with version narrowing, so for now, we do this revert to restore the previous behavior and we'll try to address the version narrowing some other time. This also adds the case from #4885 as a regression test, ensuring that we don't break that in the future. I confirmed that with version narrowing, this test outputs duplicate distributions. Without narrowing, there are no duplicates. Ref #4707, Fixes #4885
This commit is contained in:
parent
ac3a085084
commit
857d2e8f1e
3 changed files with 141 additions and 4 deletions
|
@ -50,7 +50,19 @@ impl PythonRequirement {
|
|||
|
||||
/// Narrow the [`PythonRequirement`] to the given version, if it's stricter (i.e., greater)
|
||||
/// than the current `Requires-Python` minimum.
|
||||
pub fn narrow(&self, target: &RequiresPythonBound) -> Option<Self> {
|
||||
pub fn narrow(&self, _target: &RequiresPythonBound) -> Option<Self> {
|
||||
// This represents a "small revert" of the PR that added
|
||||
// Requires-Python version narrowing[1]. But narrowing has
|
||||
// led to at least one bug[2] whose fix is not clear. We
|
||||
// decided to revert narrowing under the idea that it is better
|
||||
// to be strict (i.e., fail to resolve in some cases, like
|
||||
// universal_requires_python in uv/tests/pip_compile) than it
|
||||
// is to output an incorrect lock, as in [2].
|
||||
//
|
||||
// [1]: https://github.com/astral-sh/uv/pull/4707
|
||||
// [2]: https://github.com/astral-sh/uv/issues/4885
|
||||
None
|
||||
/*
|
||||
let Some(PythonTarget::RequiresPython(requires_python)) = self.target.as_ref() else {
|
||||
return None;
|
||||
};
|
||||
|
@ -59,6 +71,7 @@ impl PythonRequirement {
|
|||
installed: self.installed.clone(),
|
||||
target: Some(PythonTarget::RequiresPython(requires_python)),
|
||||
})
|
||||
*/
|
||||
}
|
||||
|
||||
/// Return the installed version of Python.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue