Report Python versions in pyvenv.cfg version mismatch (#13027)

When working on #13025 I noticed this message was lacking versions,
which seems frustrating if you're debugging things.

I refactored the general `matches_interpreter` utilities that were added
in https://github.com/astral-sh/uv/pull/12884 into a more purpose-fit
function that returns an `Option` with the versions if there's a
mismatch.
This commit is contained in:
Zanie Blue
2025-04-25 13:06:46 -05:00
committed by GitHub
parent 8414e9f3dd
commit fb08116800
5 changed files with 43 additions and 27 deletions
+11 -5
View File
@@ -318,31 +318,37 @@ impl Interpreter {
&self.markers.python_full_version().version
}
/// Returns the full minor Python version.
/// Returns the Python version up to the minor component.
#[inline]
pub fn python_minor_version(&self) -> Version {
Version::new(self.python_version().release().iter().take(2).copied())
}
/// Return the major version of this Python version.
/// Returns the Python version up to the patch component.
#[inline]
pub fn python_patch_version(&self) -> Version {
Version::new(self.python_version().release().iter().take(3).copied())
}
/// Return the major version component of this Python version.
pub fn python_major(&self) -> u8 {
let major = self.markers.python_full_version().version.release()[0];
u8::try_from(major).expect("invalid major version")
}
/// Return the minor version of this Python version.
/// Return the minor version component of this Python version.
pub fn python_minor(&self) -> u8 {
let minor = self.markers.python_full_version().version.release()[1];
u8::try_from(minor).expect("invalid minor version")
}
/// Return the patch version of this Python version.
/// Return the patch version component of this Python version.
pub fn python_patch(&self) -> u8 {
let minor = self.markers.python_full_version().version.release()[2];
u8::try_from(minor).expect("invalid patch version")
}
/// Returns the Python version as a simple tuple.
/// Returns the Python version as a simple tuple, e.g., `(3, 12)`.
pub fn python_tuple(&self) -> (u8, u8) {
(self.python_major(), self.python_minor())
}