隐藏jupyter笔记本中的代码单元格,用纸纸执行,用nbconvert转换为PDF



我想使用papermill运行python程序(不是命令行(来执行jupyter笔记本电脑,然后将其转换为PDF。这个想法正在起作用,但我无法隐藏输入单元格。

对于papermill report_mode = True应该隐藏输入单元格,但是jupyter Classic(https://github.com/nteract/papermill/issues/130(似乎存在问题

其他扩展名(例如HIDE_INPUT或HTML脚本(也不够。也许隐藏单元的nbconvert模板是一种解决方案,但我没有运行。

我的最小代码:

pm.execute_notebook(
        "Input.ipynb",
        "Output.ipynb",
        parameters=dict(id=id),
        report_mode=True,
    )
notebook_filename = "Output.ipynb"
with open(notebook_filename) as f:
    nb = nbformat.read(f, as_version=4)
pdf_exporter = PDFExporter()
pdf_data, resources = pdf_exporter.from_notebook_node(nb)

因此,我正在寻找一种执行笔记本,隐藏输入单元格并将笔记本转换为PDF的方法。我想在Python中使用nbconvert,而不是用作命令行工具,因为脚本应每天运行。

我知道您说您"不想使用命令行",但是在运行papermill后,让您的Python脚本执行subprocess命令怎么样?与此答案混合:

import subprocess
subprocess.call('jupyter nbconvert --to pdf --TemplateExporter.exclude_input=True Output.ipynb')

您在代码中缺少一个小细节:

pm.execute_notebook(
        "Input.ipynb",
        "Output.ipynb",
        parameters=dict(id=id),
        report_mode=True,
    )
notebook_filename = "Output.ipynb"
with open(notebook_filename) as f:
    nb = nbformat.read(f, as_version=4)
pdf_exporter = PDFExporter()
# add this
pdf_exporter.exclude_input = True
pdf_data, resources = pdf_exporter.from_notebook_node(nb)

您也可以使用ploomber;它有一些好处,例如并行运行笔记本:

# convert.py
from pathlib import Path
from ploomber import DAG
from ploomber.tasks import NotebookRunner
from ploomber.products import File
from ploomber.executors import Parallel
dag = DAG(executor=Parallel())
# hide input and convert to PDF using the LaTeX converter
NotebookRunner(
    Path('input.ipynb'),
    File('output-latex.pdf'),
    dag=dag,
    # do not include input code (only cell's output)
    nbconvert_export_kwargs={'exclude_input': True},
    name='latex')
# hide input and convert to PDF using the web PDF converter (no need to install LaTeX!
NotebookRunner(
    Path('input.ipynb'),
    File('output-web.pdf'),
    dag=dag,
    # do not include input code (only cell's output)
    nbconvert_export_kwargs={'exclude_input': True},
    # use webpdf converter
    nbconvert_exporter_name='webpdf',
    name='web')
# generate both PDFs
if __name__ == '__main__':
    dag.build()

注意:从ploomber 0.20开始,笔记本必须具有"参数"。单元格(您可以添加一个空的(。请参阅此处的说明。

运行它:

pip install ploomber
python convert.py

相关内容

  • 没有找到相关文章

最新更新