repl: Detect Conda and Python environments with their own kernel specs (#15047)
Detect kernels in conda and python environments. Release Notes: - N/A
This commit is contained in:
parent
6769e55ce0
commit
9d11a6ff78
1 changed files with 28 additions and 1 deletions
|
@ -13,6 +13,7 @@ use runtimelib::{
|
||||||
};
|
};
|
||||||
use smol::{net::TcpListener, process::Command};
|
use smol::{net::TcpListener, process::Command};
|
||||||
use std::{
|
use std::{
|
||||||
|
env,
|
||||||
fmt::Debug,
|
fmt::Debug,
|
||||||
net::{IpAddr, Ipv4Addr, SocketAddr},
|
net::{IpAddr, Ipv4Addr, SocketAddr},
|
||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
|
@ -374,7 +375,33 @@ async fn read_kernels_dir(path: PathBuf, fs: &dyn Fs) -> Result<Vec<KernelSpecif
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn kernel_specifications(fs: Arc<dyn Fs>) -> Result<Vec<KernelSpecification>> {
|
pub async fn kernel_specifications(fs: Arc<dyn Fs>) -> Result<Vec<KernelSpecification>> {
|
||||||
let data_dirs = dirs::data_dirs();
|
let mut data_dirs = dirs::data_dirs();
|
||||||
|
|
||||||
|
// Pick up any kernels from conda or conda environment
|
||||||
|
if let Ok(conda_prefix) = env::var("CONDA_PREFIX") {
|
||||||
|
let conda_prefix = PathBuf::from(conda_prefix);
|
||||||
|
let conda_data_dir = conda_prefix.join("share").join("jupyter");
|
||||||
|
data_dirs.push(conda_data_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search for kernels inside the base python environment
|
||||||
|
let command = Command::new("python")
|
||||||
|
.arg("-c")
|
||||||
|
.arg("import sys; print(sys.prefix)")
|
||||||
|
.output()
|
||||||
|
.await;
|
||||||
|
|
||||||
|
if let Ok(command) = command {
|
||||||
|
if command.status.success() {
|
||||||
|
let python_prefix = String::from_utf8(command.stdout);
|
||||||
|
if let Ok(python_prefix) = python_prefix {
|
||||||
|
let python_prefix = PathBuf::from(python_prefix.trim());
|
||||||
|
let python_data_dir = python_prefix.join("share").join("jupyter");
|
||||||
|
data_dirs.push(python_data_dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let kernel_dirs = data_dirs
|
let kernel_dirs = data_dirs
|
||||||
.iter()
|
.iter()
|
||||||
.map(|dir| dir.join("kernels"))
|
.map(|dir| dir.join("kernels"))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue