使用Papermill在Notebook中执行get_ipython代码时出现问题

时间:2019-07-10 17:39:20

标签: jupyter-notebook ipython papermill

我有一个笔记本,可以重新格式化探索性分析笔记本的结果以导出到幻灯片。该笔记本根据传入的“零件类型”和“参数”创建了新的单元格。我使用以下代码生成了一个新的单元格,并且在我在笔记本电脑中进行测试时可以正常工作:

def create_code_cell(cell_content, replace=False,):
    shell = get_ipython()
    payload = {
        "source":"set_next_input",
        "text":cell_content,
        "replace":replace,
    }
    shell.payload_manager.write_payload(payload, single=False)

我遇到的问题是当我用Papermill执行该功能时并没有创建单元。

如果我打开从Papermill创建的新笔记本,然后单击Cells => Run,将生成所有单元格。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

Papermill在后台运行nbConvert,它正在运行IPython Shell,而没有启动任何Web浏览器消息传递协议。如果在外壳中运行IPython并运行给定的命令,则不会生成任何输出。通过在浏览器中运行笔记本电脑设置的消息传递协议就是侦听这些有效负载更新并从中创建一个新单元的过程。

我看到的用于在笔记本中以编程方式创建单元格的唯一其他解决方案依赖于JavaScript来运行,如果您也不在浏览器(也称为nbConvert)中运行,则该JavaScript也不会执行。

也许这就是您已经拥有的,但是您能否以这样的方式设置生成的笔记本,即当用户在浏览器中首次运行它时,笔记本会“自行扩展”吗?