Variablen-Explorer in Jupyter Notebook


78

Gibt es in Jupyter (IPython) einen Variablen-Explorer wie in Spyder? Es ist sehr unangenehm, die Liste der Variablen jedes Mal drucken zu müssen, wenn ich den Testcode durchlaufe.

Wurde diese Funktion bereits implementiert? Wenn ja, wie kann ich es aktivieren?

Antworten:


93

AKTUALISIEREN

Scrollen Sie nach unten zu dem Abschnitt mit der Bezeichnung Update, um eine viel weniger komplizierte Methode zu erhalten.

ALTE ANTWORT

Hier ist ein Notizbuch, wie Sie Ihren eigenen Variableninspektor erstellen . Ich denke, es wurde zurückgeschrieben, als das Jupiter-Notebook als Ipython-Notebook bezeichnet wurde, aber es funktioniert mit der neuesten Version.

Ich werde den folgenden Code veröffentlichen, falls der Link unterbrochen wird.

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_()

Führen Sie die folgenden Schritte aus:

inspector = VariableInspectorWindow(get_ipython())
inspector

Machen Sie es zu einem 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();

AKTUALISIEREN

Datum: 17. Mai 2017

@jfbercher hat einen nbextension-Variableninspektor erstellt. Den Quellcode finden Sie hier jupyter_contrib_nbextensions . Weitere Informationen finden Sie in den Dokumenten .

Installieren

Nutzer

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

Virtuelle Umgebung

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

Aktivieren

jupyter nbextension enable varInspector/main

Hier ist ein Screenshot.

Geben Sie hier die Bildbeschreibung ein


1
Tolles Zeug, wäre schön, wenn du hier einen Schnappschuss davon posten würdest, wie es aussieht. Ich glaube, das würde helfen, die Annahme Ihrer schönen Erweiterung zu verbreiten!
Oleg

1
@ Leg direkt auf, ich habe es gerade hinzugefügt. Außerdem möchte ich nur klarstellen, dass ich nicht die Erweiterung geschrieben habe, die jemand anderes gemacht hat. Ich werde versuchen herauszufinden, wer und später eine Zuschreibung veröffentlichen.
James Draper

2
Wenn Sie den Anweisungen nach "Update 17. Mai 2017" folgen, erhalten Sie ein zusätzliches Symbol, das wie ein Visier aussieht (- :-). Klicken Sie darauf und der Variablen-Explorer wird angezeigt.
Robino

2
@Robino Es gibt eine kleine Schaltfläche in der Symbolleiste rechts unten. Es sieht aus wie ein kreisförmiger Klick, wenn er da ist.
James Draper

1
@Robino Diese Erweiterung Anrufe str(eval(obj_name)) , also wenn Sie benutzerdefinierte Klasse verwenden , können Sie hinzufügen Eigenschaft Überwachung __str__ dunder Methode. Wenn dies nicht der Fall ist, können Sie die Variable mit der zweiten Klasse "Monitoring" umschließen. Wenn Sie Einzelheiten wünschen, erstellen Sie eine neue Frage, da hier nicht mehr genügend Zeichen für den genauen Code vorhanden sind.
pkowalczyk

30

Dies könnte Ihnen helfen, obwohl es nicht genau das ist, was Spyder bietet und viel einfacher ist:

Führen Sie who aus, um eine Liste aller derzeit definierten Variablen zu erhalten :

In [1]: foo = 'bar'

In [2]: who
foo

Führen Sie für weitere Details Folgendes aus :

In [3]: whos
Variable   Type    Data/Info
----------------------------
foo        str     bar

Eine vollständige Liste der integrierten Funktionen finden Sie unter Magic Commands


2
wie Matlab / Oktave: P
Eugenio F. Martinez Pacheco

26

Wenn Sie Jupyter-Notizbücher in Jupyter Lab verwenden, wurde viel über die Implementierung eines variablen Explorers / Inspektors diskutiert. Sie können das Problem hier verfolgen

Ab sofort ist eine Jupyter Lab-Erweiterung in Arbeit, die einen Spyder-ähnlichen Variablen-Explorer implementiert. Es basiert auf der Notebook-Erweiterung, die James in seiner Antwort erwähnt hat. Die Laborerweiterung (mit Installationsanweisungen) finden Sie hier: https://github.com/lckr/jupyterlab-variableInspector

Geben Sie hier die Bildbeschreibung ein


2
genau das, wonach ich
gesucht habe

2
Wenn Sie sich nicht sicher sind, wie Sie Erweiterungen in JupyterLab installieren sollen, gehen Sie folgendermaßen vor: jupyterlab.readthedocs.io/en/stable/user/extensions.html
Nibood_the_slightly_advanced

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.