1

当 papermill 生成一个 notebook 时,会在输出路径中创建一个 .ipynb 文件,表明它没有在 jupyter 主页中运行。我希望笔记本完成执行后,它仍然使用实时内核运行,这样我就可以与其中的任何变量进行交互。相反,现在我必须重新运行单元格以获取在笔记本中生成的变量。对于任何时间密集型笔记本来说,这尤其麻烦。

我正在使用 execute_notebook 函数生成笔记本。

我的感觉是这是不可能的,因为在执行新笔记本时,它从未在我的 jupyter 主页中显示“正在运行”。我所要求的是否可以通过造纸厂实现,或者是否有另一种可扩展的实现方式?

4

3 回答 3

1

据我所知,有几种选择。Papermill 曾经允许使用 记录在笔记本中的变量papermill.record(),但已被弃用;我相信您可以获得旧版本并仍然使用它。

他们建议的另一个选择是使用剪贴簿。你可以在这里找到更多关于它的信息。

你也可以使用%store魔法: 在 IPython Notebooks 之间共享数据

最后,您可以使用 python 的上下文管理器功能简单地写入平面文件:

with open('<dir>', 'w') as file:
    file.write(<var_of_choice>)

import json    
with open(<out_path>, "a+") as file:
    json.dump(<var_of_choice>, file)

如果您的笔记本加载大量数据,则让内核运行可能不是最佳选择。

于 2019-05-31T10:09:41.080 回答
1

保持内核运行听起来确实很有用,而且我在Papermill 文档中也找不到对此的支持。

看来内核可能无法使用任何用户界面运行,例如,您可以浏览到的任何本地端口,因此即使它在执行后仍然运行,您也无法与它进行交互。

但是,您似乎不需要重新运行保存的笔记本中的任何内容来恢复已计算的变量,因为您可以简单地使用papermill.read_notebook,不是吗?

于 2019-04-02T03:54:19.317 回答
1

您可以通过遵循扩展的 papermill 文档来实现这一点,以实现一个链接到实时内核的自定义引擎,或者让内核在执行后保持不变。这将需要一些自定义代码来避免 nbconvert 停止内核和/或将目标内核传递给 papermill 的执行函数。可能,但不是开箱即用。

于 2019-04-25T06:08:49.090 回答