There are several methods of extending the functionality of Jupyter Notebooks. Here are four of them:
- IPython kernel extensions
- Notebook extensions
- Notebook server extensions
For the purposes of this article, I will be focusing on the third item, Notebook Extensions. However, let’s take a moment and talk about the other three so that you are aware of how they can affect your Notebook.
The Kernel is basically the language run-time used. The default is Python via the IPython kernel. You can extend your Jupyter Notebook to use other languages besides Python. Check out the following URL for more information:
I won’t be covering the installation of other kernels in this article as each kernel has different installation instructions. The URL above should be used as it has hyperlinks to the most up-to-date information on this topic.
You can also implement your own kernel if you want to. Here’s a great primer on the topic:
IPython Kernel Extensions
The IPython Kernel extension is just a Python module that can be used to modify the interactive shell environment. In Jupyter’s case, these extensions would modify how code cells behave. You can use this type of extension to register new magics, define variables and modify the user’s namespace. You can use the following three magics for managing IPython extensions:
See the IPython documentation for full details on these magics.
Notebook Server Extensions
Jupyter Notebook also has the concept of “server extensions”. A server extension is a Python module that loads when the Notebook’s web server application starts. The current method of loading this type of extension is via Jupyter’s configuration system, which we talked about in Chapter 3. You will need to specify which extensions to load in the configuration file or via the command line interface.
If you add a new extension while Jupyter Notebook is running, you will have to restart the Notebook process to activate the new extension.
Let’s learn how you might install a Notebook Extension. The manual method of installing a Jupyter Notebook extension would look something like this, assuming you have already downloaded / pip installed the package that contains the extension:
jupyter nbextension install EXTENSION jupyter nbextension enable EXTENSION
Note that you would replace EXTENSION with the name of the extension you are intending to install.
Another method that seems to have gained a lot of backing for managing Notebook extensions is by using the Jupyter NbExtensions Configurator. You can check out the project here.
This package is not part of the Jupyter Project, but it is quite helpful. You can use pip or conda to install the Configurator. Here’s how to do it with pip:
pip install jupyter_nbextensions_configurator
If you use conda as your Python package manager, then you would install the Configurator like this:
conda install -c conda-forge jupyter_nbextensions_configurator
The Configurator is a Jupyter server extension and must be enabled. You will need to run the following command in your terminal before starting Jupyter Notebook (or you can restart the server):
jupyter nbextensions_configurator enable --user
When I ran this command, I got the following output:
Enabling: jupyter_nbextensions_configurator - Writing config: /Users/michael/.jupyter - Validating... jupyter_nbextensions_configurator 0.4.0 OK Enabling notebook nbextension nbextensions_configurator/config_menu/main... Enabling tree nbextension nbextensions_configurator/tree_tab/main...
After starting up Jupyter Notebook, just click on the Nbextensions tab and you should see something like the following:
Since we don’t have any extensions downloaded and installed, the Configurator looks kind of barren and can’t really do all that much for us right now. Let’s get some extensions to try!
If you were to search for Jupyter Notebook extensions, you would find the **jupyter_contrib_nbextensions** pretty quickly. It is a collection of Notebook extensions provided by the Jupyter community. You can read more about the extensions that are included in this package at either of the following links:
To install this set of extensions, you can once again use either pip or conda. Here is the pip command you will need:
pip install jupyter_contrib_nbextensions
And here is the conda command:
conda install -c conda-forge jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
Now that you have the new extensions installed, you can use the Configurator tool we installed earlier to easily enable or disable them:
As you can see in the screenshot above, there is now a LOT of extensions to play around with. The Configurator is really handy for figuring out which extensions you have installed and enabled. You can also enable and disable Notebook extensions by hand in the terminal using jupyter nbextension enable EXTENSION or jupyter nbextension disable EXTENSION respectively, but I personally find the Configurator easier to use.
In this article we learned about the different types of extensions you can use with Jupyter. The one we cared the most about were the Jupyter Notebook extensions. We then went on to learn the basics of installing extensions. We also learned how to enable and disable extensions using the terminal and also via the Jupyter NbExtensions Configurator package.