将Jupyter笔记本导入为模块,但允许检查

时间:2018-06-10 21:23:06

标签: python import ipython jupyter-notebook

我正在开发一个项目,我将笔记本作为模块导入另一个模块。 我在IPython GH上使用example,它运行正常。

但是,现在我正在尝试添加一个我需要访问函数/类方法的源代码(inspect.getsourcelines())的功能。 当我在一个笔记本中执行它时,该功能有效。 但是,只要我将该功能作为模块导入,检查就不能再读取源了。

这是因为代码是通过exec(code, mod.__dict__)执行的,正如预期的那样,Python默认情况下不会允许读取源代码。

我搜索了一段时间,但还没有找到确凿的答案,所以我的问题在这里:

  1. 为什么在示例中使用exec执行源代码? (我的怀疑:因为代码是预先转换的)      编辑:为什么示例中没有使用run_cell
  2. 一般来说,当我执行Jupyter单元格时会发生什么?代码是否在那里转换?编辑:我认为它是run_cell,我是对的吗?
  3. 是否可以修改module-import-example以使用标准的“execute-cell”命令并允许使用inspect查看源代码?

1 个答案:

答案 0 :(得分:0)

所以我还没有找到一个完全可以接受的解决方案。

对于任何感兴趣的人:作为一种解决方法我使用%run filename命令将所有内容导入本地笔记本(并打印它执行的所有输出[1])

问题:一切都是'本地'而不是子模块。这意味着导入的笔记本中定义的任何变量都是可访问的并覆盖现有的变量。这可能会有点烦人。 (但是现在我至少很高兴它在某种程度上有效)。

[1] %%capture阻止输出并使其至少干净。