Allow for venv activation script to use pyenv (#33119)

Release Notes:

- Allows for configuration and use of `pyenv` as a virtual environment provider
This commit is contained in:
Taylor Beever 2025-07-15 08:44:40 -06:00 committed by GitHub
parent bd78f2c493
commit 0671a4d5ae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 33 additions and 17 deletions

View file

@ -523,36 +523,47 @@ impl Project {
},
terminal_settings::ActivateScript::Nushell => "overlay use",
terminal_settings::ActivateScript::PowerShell => ".",
terminal_settings::ActivateScript::Pyenv => "pyenv",
_ => "source",
};
let activate_script_name = match venv_settings.activate_script {
terminal_settings::ActivateScript::Default => "activate",
terminal_settings::ActivateScript::Default
| terminal_settings::ActivateScript::Pyenv => "activate",
terminal_settings::ActivateScript::Csh => "activate.csh",
terminal_settings::ActivateScript::Fish => "activate.fish",
terminal_settings::ActivateScript::Nushell => "activate.nu",
terminal_settings::ActivateScript::PowerShell => "activate.ps1",
};
let path = venv_base_directory
.join(match std::env::consts::OS {
"windows" => "Scripts",
_ => "bin",
})
.join(activate_script_name)
.to_string_lossy()
.to_string();
let quoted = shlex::try_quote(&path).ok()?;
let line_ending = match std::env::consts::OS {
"windows" => "\r",
_ => "\n",
};
smol::block_on(self.fs.metadata(path.as_ref()))
.ok()
.flatten()?;
Some(format!(
"{} {} ; clear{}",
activate_keyword, quoted, line_ending
))
if venv_settings.venv_name.is_empty() {
let path = venv_base_directory
.join(match std::env::consts::OS {
"windows" => "Scripts",
_ => "bin",
})
.join(activate_script_name)
.to_string_lossy()
.to_string();
let quoted = shlex::try_quote(&path).ok()?;
smol::block_on(self.fs.metadata(path.as_ref()))
.ok()
.flatten()?;
Some(format!(
"{} {} ; clear{}",
activate_keyword, quoted, line_ending
))
} else {
Some(format!(
"{activate_keyword} {activate_script_name} {name}; clear{line_ending}",
name = venv_settings.venv_name
))
}
}
fn activate_python_virtual_environment(