Add handling for unnamed conda environments in base environment detection (#15681)

While investigating https://github.com/astral-sh/uv/pull/15679, I
created an unnamed conda environment and noticed this quality which
allows us to detect that it's not the base environment.
This commit is contained in:
Zanie Blue 2025-09-17 11:34:23 -05:00 committed by GitHub
parent 1943aba150
commit d5012c66bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 0 deletions

View File

@ -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(())
}

View File

@ -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(&current_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" {