Skip to content

Latest commit

 

History

History
118 lines (73 loc) · 4.17 KB

README.md

File metadata and controls

118 lines (73 loc) · 4.17 KB

Automatic Environment Kernel Detection for Jupyter

A Jupyter plugin to enable the automatic detection of environments as kernels.

This plugin looks in the directories you specify for installed environments which have Jupyter installed and lists them as kernels for Jupyter to find. This makes it easy to run one notebook instance and access kernels with access to different versions of Python or different modules seamlessly.

Installation

The plugin can be installed with:

pip install environment_kernels

To enable the plugin add the following line to your notebook config file:

c.NotebookApp.kernel_spec_manager_class = 'environment_kernels.EnvironmentKernelSpecManager'

To create a config file run:

jupyter notebook --generate-config

or run the notebook with the following argument:

--NotebookApp.kernel_spec_manager_class='environment_kernels.EnvironmentKernelSpecManager'

Search Directories for Environments

The plugin works by getting a list of possible environments which might contain an ipython kernel.

There are multiple ways to find possible environments:

  • All subdirs of the base directories (default: ~/.conda/envs for conda based environments and ~/.virtualenvs) for virtualenv based environments.
  • If the jupyter notebook is being run in the conda root environment conda.config.envs_dirs will be imported and all subdirs of these dirs will be added to the list of possible environments.
  • If the notebook server is run from inside a conda environment then the CONDA_ENV_DIR variable will be set and will be used to find the directory which contains the environments.
  • If a conda executeable is available, it will be queried for a list of environments.

Each possible environment will be searched for an ipython executeable and if found, a kernel entry will be added on the fly.

The ipython search pattern is on Linux and OS/X:

ENV_NAME/{bin|Scripts}/ipython

and on Windows:

ENV_NAME\{bin|Scripts}\ipython.exe

The kernels will be named after the type (conda or virtualenv) and by the name of the environment directory (example: the kernel in conda environment C:\miniconda\envs\tests gets the name conda_tests). If there are multiple envs which would result in the same kernel name (e.g. when multiple base dirs are configured, which each contain an environment with the same name), only the first kernel will be used and this ommision will be mentioned in the notebook console log.

You can configure this behaviour in mutliple ways:

You can override the default base directories by setting the following config values:

c.EnvironmentKernelSpecManager.virtualenv_env_dirs=['/opt/virtualenv/envs/']
c.EnvironmentKernelSpecManager.conda_env_dirs=['/opt/miniconda/envs/']

You can also disable specific search paths:

c.EnvironmentKernelSpecManager.find_conda_envs=False
c.EnvironmentKernelSpecManager.find_virtualenv_envs=False

The above disables both types of environments, so this will effectivly disable all environment kernels.

You can also disable only the conda call, which is expensive but the only reliable way on windows:

c.EnvironmentKernelSpecManager.use_conda_directly=False

Limiting Environments

If you want to, you can also ignore environments with certain names:

c.EnvironmentKernelSpecManager.blacklist_envs=['conda_testenv']

Or you can specify a whitelist of "allowed" environments with:

c.EnvironmentKernelSpecManager.whitelist_envs=['virtualenv_testenv']

Configuring the display name

The default lists all environmental kernels as Environment (type_name). This can be cumbersome, as these kernels are usually sorted higher than other kernels.

You can change the display name via this config (you must include the placeholder {}!):

c.EnvironmentKernelSpecManager.display_name_template="~Env ({})"

Config via the commandline

All config values can also be set on the commandline by using the config value as argument:

As an example:

c.EnvironmentKernelSpecManager.blacklist_envs=['conda_testenv']

becomes

--EnvironmentKernelSpecManager.blacklist_envs="['conda_testenv']"