Use interpreter rather than environment in uv run (#4559)

This commit is contained in:
Charlie Marsh 2024-06-26 13:57:08 -04:00 committed by GitHub
parent 963a7b2ab5
commit a328c7b995
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,3 +1,4 @@
use std::borrow::Cow;
use std::ffi::OsString; use std::ffi::OsString;
use std::path::PathBuf; use std::path::PathBuf;
@ -14,7 +15,8 @@ use uv_distribution::{ProjectWorkspace, Workspace, WorkspaceError};
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_requirements::RequirementsSource; use uv_requirements::RequirementsSource;
use uv_toolchain::{ use uv_toolchain::{
EnvironmentPreference, PythonEnvironment, Toolchain, ToolchainPreference, ToolchainRequest, EnvironmentPreference, Interpreter, PythonEnvironment, Toolchain, ToolchainPreference,
ToolchainRequest,
}; };
use uv_warnings::warn_user; use uv_warnings::warn_user;
@ -47,7 +49,7 @@ pub(crate) async fn run(
} }
// Discover and sync the base environment. // Discover and sync the base environment.
let base_env = if isolated { let base_interpreter = if isolated {
// package is `None`, isolated and package are marked as conflicting in clap. // package is `None`, isolated and package are marked as conflicting in clap.
None None
} else { } else {
@ -68,7 +70,7 @@ pub(crate) async fn run(
} }
}; };
let venv = if let Some(project) = project { let interpreter = if let Some(project) = project {
debug!( debug!(
"Discovered project `{}` at: {}", "Discovered project `{}` at: {}",
project.project_name(), project.project_name(),
@ -117,7 +119,7 @@ pub(crate) async fn run(
) )
.await?; .await?;
venv venv.into_interpreter()
} else { } else {
debug!("No project found; searching for Python interpreter"); debug!("No project found; searching for Python interpreter");
@ -135,20 +137,17 @@ pub(crate) async fn run(
) )
.await?; .await?;
// Creating a `PythonEnvironment` from a `find_or_fetch` is generally discouraged, since toolchain.into_interpreter()
// we may end up modifying a managed toolchain. However, the environment here is
// read-only.
PythonEnvironment::from_toolchain(toolchain)
}; };
Some(venv) Some(interpreter)
}; };
if let Some(base_env) = &base_env { if let Some(base_interpreter) = &base_interpreter {
debug!( debug!(
"Using Python {} interpreter at: {}", "Using Python {} interpreter at: {}",
base_env.interpreter().python_version(), base_interpreter.python_version(),
base_env.interpreter().sys_executable().display() base_interpreter.sys_executable().display()
); );
} }
@ -160,8 +159,8 @@ pub(crate) async fn run(
debug!("Syncing ephemeral environment."); debug!("Syncing ephemeral environment.");
// Discover an interpreter. // Discover an interpreter.
let interpreter = if let Some(base_env) = &base_env { let interpreter = if let Some(base_interpreter) = &base_interpreter {
base_env.interpreter().clone() base_interpreter.clone()
} else { } else {
let client_builder = BaseClientBuilder::new() let client_builder = BaseClientBuilder::new()
.connectivity(connectivity) .connectivity(connectivity)
@ -238,9 +237,9 @@ pub(crate) async fn run(
.map(PythonEnvironment::scripts) .map(PythonEnvironment::scripts)
.into_iter() .into_iter()
.chain( .chain(
base_env base_interpreter
.as_ref() .as_ref()
.map(PythonEnvironment::scripts) .map(Interpreter::scripts)
.into_iter(), .into_iter(),
) )
.map(PathBuf::from) .map(PathBuf::from)
@ -261,11 +260,12 @@ pub(crate) async fn run(
.into_iter() .into_iter()
.flatten() .flatten()
.chain( .chain(
base_env base_interpreter
.as_ref() .as_ref()
.map(PythonEnvironment::site_packages) .map(Interpreter::site_packages)
.into_iter() .into_iter()
.flatten(), .flatten()
.map(Cow::Borrowed),
) )
.map(PathBuf::from) .map(PathBuf::from)
.chain( .chain(