我在一个.ipynb文件中有一些代码,并且我已经不需要IPython Notebook的“交互”特性了。我想直接从Mac终端命令行运行它。

基本上,如果这只是一个.py文件,我相信我可以从命令行执行python filename.py。对于.ipynb文件是否也有类似的东西?


当前回答

更新引用作者的评论,以获得更好的可视性:

作者注:“这个项目开始于Jupyter的执行API之前,这是现在从命令行运行笔记本的推荐方式。考虑runipy已弃用且无法维护。”——塞巴斯蒂安·帕尔马

安装允许在终端上运行代码的runipy库

pip install runipy

编译代码后:

runipy <YourNotebookName>.ipynb

你也可以试试cronjob。所有信息都在这里

其他回答

Nbconvert允许你使用——execute标志运行笔记本:

jupyter nbconvert --execute <notebook>

如果你想运行一个笔记本并生成一个新的笔记本,你可以添加——到笔记本:

jupyter nbconvert --execute --to notebook <notebook>

或者如果你想用新的输出替换现有的笔记本:

jupyter nbconvert --execute --to notebook --inplace <notebook>

因为这是一个非常长的命令,你可以使用别名:

alias nbx="jupyter nbconvert --execute --to notebook"
nbx [--inplace] <notebook>

你也可以使用jupytext https://jupytext.readthedocs.io/en/latest/index.html。

这可以让你的笔记本配对。所以对于每个ipynb文件,你都有一个。py文件,以及一些注释。.py文件可以照常执行。 你可以享受两个世界的好处,但代价是额外的一个文件。

哦,顺便说一下,如果你使用版本控制,你只能提交带有漂亮diff的.py文件,而不是丑陋的.ipynb diff。

(在.py文件的语法类似于Databricks笔记本,如果你熟悉他们…)

就我而言,最适合我的命令是:

jupyter nbconvert --execute --clear-output <notebook>.ipynb

为什么?此命令不会创建额外的文件(就像.py文件一样),并且每次执行notebook时都会覆盖单元格的输出。

如果你运行:

jupyter nbconvert --help

——clear-output 清除当前文件的输出并保存到位,覆盖现有的笔记本。

现在有一个jupyter run子命令将执行一个笔记本。

jupyter run notebook.ipynb

关于这个命令的更多信息可以在Jupyter文档中找到。

更新引用作者的评论,以获得更好的可视性:

作者注:“这个项目开始于Jupyter的执行API之前,这是现在从命令行运行笔记本的推荐方式。考虑runipy已弃用且无法维护。”——塞巴斯蒂安·帕尔马

安装允许在终端上运行代码的runipy库

pip install runipy

编译代码后:

runipy <YourNotebookName>.ipynb

你也可以试试cronjob。所有信息都在这里