Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Variable Explorer in Jupyter Notebook

Is there a variable explorer in Jupyter (IPython) like in Spyder? It is very uncomfortable having to print the list of variables all the time each time I run through the test code.

Has this feature been implemented yet? If so, how to enable it?

like image 980
Ébe Isaac Avatar asked Jun 09 '16 06:06

Ébe Isaac


People also ask

How do I open variable Explorer in Jupyter?

Enable. Following instructions after "Update May 17 2017" gives you an extra icon that looks like a gun sight (-:-) click on this and the Variable Explorer pops up. @Robino there is a little a button in the toolbar off to the right it looks like circle sort of click that if it's there.

Can you view variables in Jupyter Notebook?

Now if you want to get fancy, Jupyter has an extension available through nbextensions. The Variable Inspector extension will give you a nice option for viewing variables in an output similar to the %whos output above.

Where does Jupyter Notebook store variables?

More particularly, the variables are stored under ~/. ipython/profile_default/db/autorestore/<variable_name> .


1 Answers

UPDATE

Scroll down to the section labeled update for a much less convoluted method.

OLD ANSWER

Here is a notebook on how to make your own Variable Inspector. I think it was written back when jupyter notebook was called ipython notebook but it works on the latest version.

I'll post the code below just in case the link breaks.

import ipywidgets as widgets # Loads the Widget framework. from IPython.core.magics.namespace import NamespaceMagics # Used to query namespace.  # For this example, hide these names, just to avoid polluting the namespace further get_ipython().user_ns_hidden['widgets'] = widgets get_ipython().user_ns_hidden['NamespaceMagics'] = NamespaceMagics  class VariableInspectorWindow(object):     instance = None  def __init__(self, ipython):     """Public constructor."""     if VariableInspectorWindow.instance is not None:         raise Exception("""Only one instance of the Variable Inspector can exist at a              time.  Call close() on the active instance before creating a new instance.             If you have lost the handle to the active instance, you can re-obtain it             via `VariableInspectorWindow.instance`.""")      VariableInspectorWindow.instance = self     self.closed = False     self.namespace = NamespaceMagics()     self.namespace.shell = ipython.kernel.shell      self._box = widgets.Box()     self._box._dom_classes = ['inspector']     self._box.background_color = '#fff'     self._box.border_color = '#ccc'     self._box.border_width = 1     self._box.border_radius = 5      self._modal_body = widgets.VBox()     self._modal_body.overflow_y = 'scroll'      self._modal_body_label = widgets.HTML(value = 'Not hooked')     self._modal_body.children = [self._modal_body_label]      self._box.children = [         self._modal_body,      ]      self._ipython = ipython     self._ipython.events.register('post_run_cell', self._fill)  def close(self):     """Close and remove hooks."""     if not self.closed:         self._ipython.events.unregister('post_run_cell', self._fill)         self._box.close()         self.closed = True         VariableInspectorWindow.instance = None  def _fill(self):     """Fill self with variable information."""     values = self.namespace.who_ls()     self._modal_body_label.value = '<table class="table table-bordered table-striped"><tr><th>Name</th><th>Type</th><th>Value</th></tr><tr><td>' + \         '</td></tr><tr><td>'.join(['{0}</td><td>{1}</td><td>{2}'.format(v, type(eval(v)).__name__, str(eval(v))) for v in values]) + \         '</td></tr></table>'  def _ipython_display_(self):     """Called when display() or pyout is used to display the Variable      Inspector."""     self._box._ipython_display_() 

Run inline with the following:

inspector = VariableInspectorWindow(get_ipython()) inspector 

Make it a javascript pop out;

%%javascript $('div.inspector')     .detach()     .prependTo($('body'))     .css({         'z-index': 999,          position: 'fixed',         'box-shadow': '5px 5px 12px -3px black',         opacity: 0.9     })     .draggable(); 

UPDATE

Date: May 17 2017

@jfbercher created a nbextension variable inspector. The source code can be seen here jupyter_contrib_nbextensions. For more information see the docs.

Install

User

pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user 

Virtual environment

pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --sys-prefix 

Enable

jupyter nbextension enable varInspector/main 

Here's a screen-shot;

enter image description here

like image 108
James Draper Avatar answered Oct 03 '22 21:10

James Draper