Skip to content

Commit

Permalink
Create empty environment for uv run --isolated (#4849)
Browse files Browse the repository at this point in the history
## Summary

If you pass `--isolated` but no `--with`, at present, we don't create
any environment (so `--python` isn't respected and `python` will fail
entirely if it wasn't already in your path). Now, we create a base
environment in `--isolated` even if `with` wasn't provided.

Closes #4846.
Closes #4776.
  • Loading branch information
charliermarsh committed Jul 6, 2024
1 parent 1f454f3 commit 798ec37
Showing 1 changed file with 32 additions and 23 deletions.
55 changes: 32 additions & 23 deletions crates/uv/src/commands/project/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -231,12 +231,14 @@ pub(crate) async fn run(
);
}

// If necessary, create an environment for the ephemeral requirements.
// If necessary, create an environment for the ephemeral requirements or command.
let temp_dir;
let ephemeral_env = if requirements.is_empty() {
let ephemeral_env = if requirements.is_empty() && base_interpreter.is_some() {
// If we don't have any `--with` requirements, and we already have a base environment, then
// there's no need to create an additional environment.
None
} else {
debug!("Syncing ephemeral environment.");
debug!("Creating ephemeral environment");

// Discover an interpreter.
let interpreter = if let Some(base_interpreter) = &base_interpreter {
Expand Down Expand Up @@ -274,29 +276,36 @@ pub(crate) async fn run(
false,
)?;

let client_builder = BaseClientBuilder::new()
.connectivity(connectivity)
.native_tls(native_tls);
if requirements.is_empty() {
Some(venv)
} else {
debug!("Syncing ephemeral requirements");

let spec =
RequirementsSpecification::from_simple_sources(&requirements, &client_builder).await?;
let client_builder = BaseClientBuilder::new()
.connectivity(connectivity)
.native_tls(native_tls);

// Install the ephemeral requirements.
Some(
project::update_environment(
venv,
spec,
&settings,
&state,
preview,
connectivity,
concurrency,
native_tls,
cache,
printer,
let spec =
RequirementsSpecification::from_simple_sources(&requirements, &client_builder)
.await?;

// Install the ephemeral requirements.
Some(
project::update_environment(
venv,
spec,
&settings,
&state,
preview,
connectivity,
concurrency,
native_tls,
cache,
printer,
)
.await?,
)
.await?,
)
}
};

debug!("Running `{command}`");
Expand Down

0 comments on commit 798ec37

Please sign in to comment.