Home Ask Login Register

Developers Planet

Your answer is one click away!

C. dBD February 2016

How to place custom Jupyter kernels inside virtual environment?

I have a custom Jupyter kernel which runs IPython using a custom IPython profile which uses a matplotlib stylesheet.

I know to run this successfully normally I would put:

  • The matplotlib stylesheet in ~/.config/matplotlib/stylelib/

  • The IPython profile in ~/.ipython/

  • The kernel json in ~/.jupyter/kernels/my_kernel/

But I am doing this as part of larger program which runs in a virtualenv, and if I put the things as above then any notebook server running on the computer will be able to see the custom kernels, even if it is running outside the venv. I don't what this because I don't want my program to interfere with other notebooks on the computer.

I think what I need to do is put the things above somewhere equivalent inside the venv but I can't figure out where they should go. Doe anyone know where they would go? Or is this just a thing IPython/Jupiter can't/won't do?

It's probably worth mentioning that in the case of the stylesheet for example I don't want to just put it in the working directory of my program (which is one option matplotlib offers).


minrk February 2016

You can put kernelspecs in VIRTUAL_ENV/share/jupyter/kernels/ and they will be made available if the notebook server is running in that env. In general, <sys.prefix>/share/jupyter/kernels is included in the path to look for kernelspecs.

You can see the various locations Jupyter will look, you can see the output of jupyter --paths:

$ jupyter --paths


Kernelspecs are considered data files, and will be found in any of those directories listed under data:, in a kernels subdirectory, e.g. /usr/local/share/jupyter/kernels.

Post Status

Asked in February 2016
Viewed 2,908 times
Voted 9
Answered 1 times


Leave an answer

Quote of the day: live life