Enable terminal activation for uv-managed environments (#45949)

Currently, the Python toolchain can identify `uv` and `uv-workspace`
environments (showing the correct labels in the UI), but it fails to
activate them when opening a new terminal. This is because the
activation script resolution and command generation logic were missing
for these environment kinds.

This PR adds `uv` and `uv-workspace` to the standard virtual environment
activation flow. Since `uv` creates environments with a standard `venv`
structure, we can reuse the existing `resolve_venv_activation_scripts`
logic to find and execute the appropriate `activate` scripts for
different shells.

Release Notes:

- Fixed terminal activation for `uv` and `uv-workspace` Python
environments.
This commit is contained in:
Xin Zhao authored and GitHub committed 2026-01-05 15:30:49 +00:00
1 parent 17c483a2c9
commit ea90a72e2e
1 file changed
+12 -4
+12 -4
View File
@@ -1358,7 +1358,12 @@ impl ToolchainLister for PythonToolchainProvider {
activation_script.push(format!("{manager} activate base"));
}
}
Some(PythonEnvironmentKind::Venv | PythonEnvironmentKind::VirtualEnv) => {
Some(
PythonEnvironmentKind::Venv
| PythonEnvironmentKind::VirtualEnv
| PythonEnvironmentKind::Uv
| PythonEnvironmentKind::UvWorkspace,
) => {
if let Some(activation_scripts) = &toolchain.activation_scripts {
if let Some(activate_script_path) = activation_scripts.get(&shell) {
let activate_keyword = shell.activate_keyword();
@@ -1415,9 +1420,12 @@ async fn venv_to_toolchain(venv: PythonEnvironment, fs: &dyn Fs) -> Option<Toolc
let mut activation_scripts = HashMap::default();
match venv.kind {
Some(PythonEnvironmentKind::Venv | PythonEnvironmentKind::VirtualEnv) => {
resolve_venv_activation_scripts(&venv, fs, &mut activation_scripts).await
}
Some(
PythonEnvironmentKind::Venv
| PythonEnvironmentKind::VirtualEnv
| PythonEnvironmentKind::Uv
| PythonEnvironmentKind::UvWorkspace,
) => resolve_venv_activation_scripts(&venv, fs, &mut activation_scripts).await,
_ => {}
}
let data = PythonToolchainData {