我一直在使用一些來自this example的非常好的代碼來從另一個ipython筆記本運行一個ipython筆記本,我基本上在下面複製它。這原來是組織我的代碼的一個非常好的方法。在一個單獨的命名空間中執行另一個ipython筆記本
但是現在,我想比較一些sympy表達式,我用大致相同的sympy表達式編碼了別人已編碼的表達式。而且,由於有一些名字衝突,我希望能在自己的命名空間來執行的兩款筆記本,所以如果鮑勃和我都定義了一個sympy表達x
,我可以評價
Bob.x - Me.x
到看看他們是否相同(或找到他們的差異)。 [注意,很容易改變一個命名空間字典到使用類似this Bunch object一個「dottable」命名空間。]
這裏的功能:
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)
的基本問題是get_ipython
得到當前運行IPython的情況下,然後run_cell
執行該實例當前名稱空間中其他筆記本的單元格。
我無法弄清楚如何改變這一點。例如,使用不同名稱空間運行exec
中的整個命令仍會找到當前的ipython實例,並使用該名稱空間。
此外,這兩個筆記本實際上需要在ipython中運行;我無法將它們導出到腳本並在命名空間中執行腳本。
您可以看看這個筆記本以及http://nbviewer.ipython.org/urls/github.com/ipython/ipython/raw/master/examples/notebooks/Importing%2520Notebooks.ipynb – Jakob
謝謝!這看起來正是我想要的。 – Mike