“writeError”之后的“ImportError:无模块命名”错误

时间:2015-07-20 12:31:48

标签: python ipython ipython-notebook

我想将iPython Notebook中的一些单元格收集到python脚本中。但是,我无法导入已添加到具有“writefile -a”魔法的脚本的函数。这是一个用于复制问题的4单元笔记本:

单元格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:无法导入名称other_func

2 个答案:

答案 0 :(得分:3)

修改后需要reload模块:

import importlib
importlib.reload(foo)

通常,使用import语句的import foo形式而不是from foo import some_func可以更好地工作。如果您有一个长模块名称,可以使用import some_long_module as slm

重命名

答案 1 :(得分:1)

IPython有一个特定的扩展名" autoreload"在进入在IPython提示符下键入的代码执行之前自动重新加载模块。

它已包含在标准的IPython安装中,因此在您的示例中,您只需要编写:

%load_ext autoreload
%autoreload 2
import foo

然后每次调用foo的特定函数时,它将在实际执行单元代码之前动态重新加载,这样就可以解决问题。