【问题标题】:Problems executing get_ipython code in Notebook with Papermill使用 Papermill 在 Notebook 中执行 get_ipython 代码时出现问题
【发布时间】:2019-07-20 04:01:34
【问题描述】:

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

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 生成所有单元格。

感谢您的帮助!

【问题讨论】:

    标签: jupyter-notebook ipython papermill


    【解决方案1】:

    Papermill 在后台使用 nbConvert,它运行 IPython 外壳而无需启动任何 Web 浏览器消息传递协议。如果您在 shell 中运行 IPython 并运行您给出的命令,则不会生成任何输出。通过在浏览器中运行 notebook 设置的消息传递协议是侦听这些有效负载更新并从中创建新单元的内容。

    我所见过的以编程方式在笔记本中创建单元格的唯一其他解决方案依赖于 JavaScript 来运行,如果您也没有在浏览器中运行,也不会执行,也就是 nbConvert。

    也许这正是您已经拥有的,但是您能否设置生成的笔记本,使用户第一次在浏览器中运行它时,笔记本会“自行扩展”?

    【讨论】:

    • 您所描述的是我最终为我正在进行的分析所做的事情,但对于我正在做的分析的迭代次数来说并不理想(最终仍然比我花了很多时间来解决这个问题:))。感谢您的详细解释,很抱歉我没有尽快回复。
    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多