Skip to content

Commit

Permalink
Display Python installation key for discovered interpreters
Browse files Browse the repository at this point in the history
Instead of "<implementation> <version>"
  • Loading branch information
zanieb committed Jul 23, 2024
1 parent dac696e commit 2e0a8a0
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 17 deletions.
7 changes: 3 additions & 4 deletions crates/uv-python/src/discovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use uv_fs::Simplified;
use uv_warnings::warn_user_once;

use crate::downloads::PythonDownloadRequest;
use crate::implementation::{ImplementationName, LenientImplementationName};
use crate::implementation::ImplementationName;
use crate::installation::PythonInstallation;
use crate::interpreter::Error as InterpreterError;
use crate::managed::ManagedPythonInstallations;
Expand Down Expand Up @@ -508,9 +508,8 @@ fn python_interpreters_from_executables<'a>(
.map(|interpreter| (source, interpreter))
.inspect(|(source, interpreter)| {
debug!(
"Found {} {} at `{}` ({source})",
LenientImplementationName::from(interpreter.implementation_name()),
interpreter.python_full_version(),
"Found `{}` at `{}` ({source})",
interpreter.key(),
path.display()
);
})
Expand Down
16 changes: 4 additions & 12 deletions crates/uv-python/src/installation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -166,15 +166,7 @@ impl PythonInstallation {
}

pub fn key(&self) -> PythonInstallationKey {
PythonInstallationKey::new(
LenientImplementationName::from(self.interpreter.implementation_name()),
self.interpreter.python_major(),
self.interpreter.python_minor(),
self.interpreter.python_patch(),
self.os(),
self.arch(),
self.libc(),
)
self.interpreter.key()
}

/// Return the Python [`Version`] of the Python installation as reported by its interpreter.
Expand All @@ -189,17 +181,17 @@ impl PythonInstallation {

/// Return the [`Arch`] of the Python installation as reported by its interpreter.
pub fn arch(&self) -> Arch {
Arch::from(&self.interpreter.platform().arch())
self.interpreter.arch()
}

/// Return the [`Libc`] of the Python installation as reported by its interpreter.
pub fn libc(&self) -> Libc {
Libc::from(self.interpreter.platform().os())
self.interpreter.libc()
}

/// Return the [`Os`] of the Python installation as reported by its interpreter.
pub fn os(&self) -> Os {
Os::from(self.interpreter.platform().os())
self.interpreter.os()
}

/// Return the [`Interpreter`] for the Python installation.
Expand Down
32 changes: 31 additions & 1 deletion crates/uv-python/src/interpreter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ use pypi_types::Scheme;
use uv_cache::{Cache, CacheBucket, CachedByTimestamp, Freshness, Timestamp};
use uv_fs::{write_atomic_sync, PythonExt, Simplified};

use crate::implementation::LenientImplementationName;
use crate::platform::{Arch, Libc, Os};
use crate::pointer_size::PointerSize;
use crate::{Prefix, PythonVersion, Target, VirtualEnvironment};
use crate::{Prefix, PythonInstallationKey, PythonVersion, Target, VirtualEnvironment};

/// A Python executable and its associated platform markers.
#[derive(Debug, Clone)]
Expand Down Expand Up @@ -172,6 +174,34 @@ impl Interpreter {
&self.markers
}

/// Returns the [`PythonInstallationKey`] for this interpreter.
pub fn key(&self) -> PythonInstallationKey {
PythonInstallationKey::new(
LenientImplementationName::from(self.implementation_name()),
self.python_major(),
self.python_minor(),
self.python_patch(),
self.os(),
self.arch(),
self.libc(),
)
}

/// Return the [`Arch`] reported by the interpreter platform tags.
pub fn arch(&self) -> Arch {
Arch::from(&self.platform().arch())
}

/// Return the [`Libc`] reported by the interpreter platform tags.
pub fn libc(&self) -> Libc {
Libc::from(self.platform().os())
}

/// Return the [`Os`] reported by the interpreter platform tags.
pub fn os(&self) -> Os {
Os::from(self.platform().os())
}

/// Returns the [`Tags`] for this Python executable.
pub fn tags(&self) -> Result<&Tags, TagsError> {
self.tags.get_or_try_init(|| {
Expand Down

0 comments on commit 2e0a8a0

Please sign in to comment.