diff --git a/crates/uv-python/src/lib.rs b/crates/uv-python/src/lib.rs index 173b10135..f45b901ab 100644 --- a/crates/uv-python/src/lib.rs +++ b/crates/uv-python/src/lib.rs @@ -1337,6 +1337,36 @@ mod tests { "Non-base conda environment should be available for virtual environment preference" ); + // When CONDA_PREFIX equals CONDA_DEFAULT_ENV, it should be treated as a virtual environment + let unnamed_env = context.tempdir.child("my-conda-env"); + TestContext::mock_conda_prefix(&unnamed_env, "3.12.4")?; + let unnamed_env_path = unnamed_env.to_string_lossy().to_string(); + + let python = context.run_with_vars( + &[ + (EnvVars::CONDA_PREFIX, Some(unnamed_env.as_os_str())), + ( + EnvVars::CONDA_DEFAULT_ENV, + Some(&OsString::from(&unnamed_env_path)), + ), + ], + || { + find_python_installation( + &PythonRequest::Default, + EnvironmentPreference::OnlyVirtual, + PythonPreference::OnlySystem, + &context.cache, + Preview::default(), + ) + }, + )??; + + assert_eq!( + python.interpreter().python_full_version().to_string(), + "3.12.4", + "We should find the unnamed conda environment" + ); + Ok(()) } diff --git a/crates/uv-python/src/virtualenv.rs b/crates/uv-python/src/virtualenv.rs index 7cdde7ba9..db3c90b48 100644 --- a/crates/uv-python/src/virtualenv.rs +++ b/crates/uv-python/src/virtualenv.rs @@ -98,6 +98,12 @@ impl CondaEnvironmentKind { return Self::Child; }; + // If the `CONDA_PREFIX` equals the `CONDA_DEFAULT_ENV`, we're in an unnamed environment + // which is typical for environments created with `conda create -p /path/to/env`. + if path == Path::new(¤t_env) { + return Self::Child; + } + // These are the expected names for the base environment; we may want to remove this // restriction in the future as it's not strictly necessary. if current_env != "base" && current_env != "root" {