2015-07-20 97 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的特定功能,将动态之前重新加载实际执行单元代码,这可以解决你的问题。