我想使用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