【问题标题】:Executing Jupyter notebook in command line在命令行中执行 Jupyter notebook
【发布时间】:2019-07-13 09:46:21
【问题描述】:

我想以编程方式运行一个包含导入语句的 jupyter 笔记本单元,并使用打开笔记本后导入的包,而不仅仅是将输出转换为新的 ipython 笔记本

目前,我正在使用 nbconvert 执行预先创建的 Jupyter 笔记本。执行 notebook 的步骤如下 -

jupyter nbconvert --execute --inplace test.ipynb

创建新笔记本的代码 -

import nbformat as nbf
nb = nbf.v4.new_notebook()
nb['cells'] = [nbf.v4.new_markdown_cell(text),nbf.v4.new_code_cell(code,metadata={'editable':False,'deletable':False}) ]
nbf.write(nb, 'test.ipynb')

笔记本单元格中的代码块包含 -

import pandas as pd
import numpy as np
import matplotlib as plt
%pylab inline
hist(normal(size=2000), bins=50)

输出单元格按预期显示直方图。 但是,我无法使用打开笔记本后导入的包。有没有办法在命令行中执行笔记本,然后在打开笔记本后使用导入的包,而无需再次手动运行单元格?

【问题讨论】:

  • unable to use the packages imported after opening the notebook 是什么意思?
  • 我可以使用 nbconvert 执行笔记本单元格。当我打开执行的笔记本文件时,我可以在输出单元格中看到输出。但是,如果我在打开笔记本后尝试使用我在不同代码单元中的同一预执行单元中导入的 pandas 包,我将无法这样做。

标签: python jupyter-notebook nbconvert


【解决方案1】:

我可以通过安装 jupyter 扩展解决这个问题 - [Jupyter notebook extension][1]https://github.com/ipython-contrib/jupyter_contrib_nbextensions

启用上述链接中文档中指定的 init_cell 扩展后,我在要设置为 Initialized cell 的单元格的笔记本创建代码中添加了元数据标记“init_cell”:True nbf.v4.new_code_cell(code,metadata={'editable':False,'deletable':False,'trusted':True,'init_cell':True})

此外,我必须在命令行中执行 jupyter trust test.ipynb 行,以确保笔记本被设置为受信任的单元格块以在笔记本加载时运行。

这会导致在加载笔记本后执行初始化的代码单元块,从而使我能够使用导入的包和变量(如果有),而无需手动运行单元。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 2016-12-06
    • 2019-08-20
    • 2018-06-01
    • 2022-11-12
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多