【问题标题】:Import Jupyter notebook as module, but allow inspect将 Jupyter 笔记本作为模块导入,但允许检查
【发布时间】:2018-06-10 21:23:05
【问题描述】:

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

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

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

我搜索了一段时间,但还没有找到一个确定的答案,所以我的问题是:

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

【问题讨论】:

    标签: python import ipython jupyter-notebook


    【解决方案1】:

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

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

    问题:一切都是“本地的”,而不是在子模块中。这意味着导入笔记本中定义的任何变量都可以访问并覆盖现有变量。这可能会变得有点烦人。 (但现在我至少很高兴它有点工作)。

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

    【讨论】:

      猜你喜欢
      • 2020-11-22
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2016-03-01
      • 2020-11-20
      • 2017-12-04
      相关资源
      最近更新 更多