Create empty environment for uv run --isolated (#4849)

## 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 https://github.com/astral-sh/uv/issues/4846.
Closes https://github.com/astral-sh/uv/issues/4776.
This commit is contained in:
Charlie Marsh 2024-07-06 14:22:19 -05:00 committed by GitHub
parent 1f454f3a67
commit 798ec373c0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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 {
@ -274,12 +276,18 @@ pub(crate) async fn run(
false,
)?;
if requirements.is_empty() {
Some(venv)
} else {
debug!("Syncing ephemeral requirements");
let client_builder = BaseClientBuilder::new()
.connectivity(connectivity)
.native_tls(native_tls);
let spec =
RequirementsSpecification::from_simple_sources(&requirements, &client_builder).await?;
RequirementsSpecification::from_simple_sources(&requirements, &client_builder)
.await?;
// Install the ephemeral requirements.
Some(
@ -297,6 +305,7 @@ pub(crate) async fn run(
)
.await?,
)
}
};
debug!("Running `{command}`");