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 definierenx
Kann 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.