2015-07-20 99 views
0

我想將我的iPython Notebook中的一些單元收集到python腳本中。但是,我無法用「writefile -a」魔法導入已添加到腳本中的函數。這裏有一個4芯筆記本複製的問題:「ImportError:No module named」error after「writefile」

單元1:保存功能分爲foo.py

%%writefile foo.py 

def some_func(): 
    print 42 

小區2:使用函數從foo.py

from foo import some_func 

some_func() 

這版畫42成功。

細胞3:添加其他功能foo.py改爲

%%writefile foo.py -a 

def other_func(): 
    print 43 

細胞4:嘗試導入other_func

from foo import other_func 

other_func() 

ImportError: cannot import name other_func

回答

3

您需要reload模塊修改之後:

import importlib 
importlib.reload(foo) 

一般而言,這與導入語句的import foo形式更好地發揮作用,而不是from foo import some_func。如果您的模塊名稱較長,可以使用import some_long_module as slm

1

IPython具有特定的擴展名「autoreload」,它在輸入執行在IPython提示符處鍵入的代碼之前自動重新加載模塊。

它已經包含在標準IPython的安裝,所以在你的榜樣,您只需要編寫:

%load_ext autoreload 
%autoreload 2 
import foo 

然後每次調用foo的特定功能,將動態之前重新加載實際執行單元代碼,這可以解決你的問題。