2013-10-28 51 views
1

我一直在使用一些來自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中運行;我無法將它們導出到腳本並在命名空間中執行腳本。

+1

您可以看看這個筆記本以及http://nbviewer.ipython.org/urls/github.com/ipython/ipython/raw/master/examples/notebooks/Importing%2520Notebooks.ipynb – Jakob

+0

謝謝!這看起來正是我想要的。 – Mike

回答

2

爲了記錄,Jakob指出的鏈接現在已經移動here,並且完美地回答了我的問題。

相關問題