从命令行运行Jupyter Notebook (.ipynb)文件,就像运行.py文件一样

5
我正在本地撰写一个Jupyter笔记本,最终将在远程服务器上运行(运行Ubuntu)。 每次需要进行更改时,我必须将笔记本导出为.py文件,然后从服务器的命令行调用它。
我希望能够即时运行它,只需调用一个命令,该命令将当前的.ipynb文件作为.py文件在命令行上执行,并显示您期望运行.py时看到的所有打印语句和输出。 我认为可以使用nbconverter来完成此操作,例如以下命令:
jupyter nbconvert --to script --execute nbconvert_test.ipynb

事实上,这并不会将.ipynb文件转换成可以在命令行上执行的.py文件,而是创建一个名为nbconvert_test.py的新文件,该文件位于相同的目录中,然后我需要在单独的命令中运行该文件。 我真的很想避免每次进行即使是小的更改时都会创建该文件,并跳过命令行上的额外步骤。
感谢任何帮助!

2
可能是从终端运行.ipynb文件?的重复问题。 - redacted
1
谢谢。是的,那个问题很相似,但是对那个问题提供的答案似乎没有将请求解释为寻找一行解决方案。 - beniam
http://deeplearning.lipingyang.org/2018/03/28/run-jupyter-notebook-script-from-terminal/ - matanster
4个回答

7
你可以将jupyter nbconvert发送到标准输出并将其管道传输到python。
jupyter nbconvert --to script --execute --stdout test_nbconvert.ipynb | python

这似乎对我不起作用。它返回一个语法错误,因为语法无效。 - beniam
尝试把结果传递给IPython而不是Python?你可能在笔记本中使用了一些特定于IPython的语法。 - fizzyh2o

2

解决方法是一个包含三个部分的小型shell脚本:

  1. 转换笔记本
  2. 执行所创建的脚本
  3. 删除脚本

创建一个名为runnb.sh的文件。

#!/bin/sh
# First argument is the notebook you would like to run
notebook=$1
scriptname="$(basename $notebook .ipynb)".py

jupyter nbconvert --to script --execute ${notebook} && python ${scriptname}
rm ${scriptname}

使用方法如下:
$ ./runnb.sh nbconvert_test.ipynb

编辑: 根据这个答案,这个命令应该可以正常运行:jupyter nbconvert --execute test_nbconvert.ipynb(只需省略--to标志)。


谢谢Robin,我认为如果没有--to标志,它会在同一目录中创建一个包含输出的HTML文件,但并不完全符合要求。你的三行脚本可能会解决问题。我现在就试试...谢谢。 - beniam
1
它不起作用,它说rm命令找不到xyz.py文件。 - Raymond

0

我遇到了类似的错误 rm 命令找不到 xyz.py 文件 然后我在 conda 虚拟环境中运行脚本,问题得以解决。

conda activate

1
你可能想要回应 Raymond 在 2016 年的评论。此外,现在有其他现代方法可以完成这个任务,除了 jupyter nbconvert。我最喜欢的方法之一是使用 jupytext 命令行执行笔记本。还有 papermill、ploomber 和 nbtoolbelt。请参见这里这里 - Wayne

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接