Führen Sie ein anderes ipython-Notizbuch in einem separaten Namespace aus

Ich habe einen sehr netten Code von verwendetdieses Beispiel um ein ipython notebook von einem anderen zu starten, das ich (im grunde) unten kopiere. Dies ist eine sehr gute Möglichkeit, meinen Code zu organisieren.

Aber jetzt möchte ich einige Sympy-Ausdrücke, die ich programmiert habe, mit ungefähr gleichwertigen Sympy-Ausdrücken vergleichen, die jemand anderes programmiert hat. Und da es einige Namenskonflikte gibt, möchte ich die beiden Notizbücher in ihren eigenen Namespaces ausführen können, sodass, wenn Bob und ich beide einen Sympy-Ausdruck definierenxKann ich nur bewerten

Bob.x - Me.x

um zu sehen, ob sie gleich sind (oder ihre Unterschiede finden). [Beachten Sie, dass es einfach ist, ein Namespace-Wörterbuch mit so etwas wie in einen "punktierbaren" Namespace umzuwandelndieses Bündelobjekt.]

Hier ist die Funktion:

def exec_nb(nbfile):
    from io import open
    from IPython.nbformat import current
    with open(nbfile) as f:
        nb = current.read(f, 'json')
    ip = get_ipython()
    for cell in nb.worksheets[0].cells:
        if cell.cell_type != 'code':
            continue
        ip.run_cell(cell.input)

Das Grundproblem ist dasget_ipython Ruft die aktuell ausgeführte ipython-Instanz ab und dannrun_cell Führt die Zellen des anderen Notizbuchs im aktuellen Namespace dieser Instanz aus.

Ich kann nicht herausfinden, wie ich das ändern kann. Führen Sie beispielsweise den gesamten Befehl in ausexec mit einem anderen Namespace findet immer noch die aktuelle ipython-Instanz und verwendet diesen Namespace.

Außerdem müssen beide Notebooks in ipython ausgeführt werden. Ich kann sie nicht in ein Skript exportieren und die Skripte in einem Namespace ausführen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage