How to run an .ipynb Jupyter Notebook from terminal?

PythonJupyter NotebookIpythonNbconvert

Python Problem Overview


I have some code in a .ipynb file and got it to the point where I don't really need the "interactive" feature of IPython Notebook. I would like to just run it straight from a Mac Terminal Command Line.

Basically, if this were just a .py file, I believe I could just do python filename.py from the command line. Is there something similar for a .ipynb file?

Python Solutions


Solution 1 - Python

nbconvert allows you to run notebooks with the --execute flag:

jupyter nbconvert --execute <notebook>

If you want to run a notebook and produce a new notebook, you can add --to notebook:

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

Or if you want to replace the existing notebook with the new output:

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

Since that's a really long command, you can use an alias:

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

Solution 2 - Python

From the command line you can convert a notebook to python with this command:

jupyter nbconvert --to python nb.ipynb

https://github.com/jupyter/nbconvert

You may have to install the python mistune package:

sudo pip install -U mistune

Solution 3 - Python

In your Terminal run ipython:

ipython

then locate your script and put there:

%run your_script.ipynb

Solution 4 - Python

You can export all your code from .ipynb and save it as a .py script. Then you can run the script in your terminal.

code export sample

Hope it helps.

Solution 5 - Python

Using ipython:

ipython --TerminalIPythonApp.file_to_run=<notebook>.ipynb

Normally, I would prefer this option as it is really self-describing. If you prefer to use less characters, use:

ipython -c "%run <notebook>.ipynb"

which is basically what Keto already suggested (unfortunately a little bit hidden) as a comment.

Solution 6 - Python

For new version instead of:

ipython nbconvert --to python <YourNotebook>.ipynb

You can use jupyter instend of ipython:

jupyter nbconvert --to python <YourNotebook>.ipynb

Solution 7 - Python

In my case, the command that best suited me was:

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

Why? This command does not create extra files (just like a .py file) and the output of the cells is overwritten everytime the notebook is executed.

If you run:

jupyter nbconvert --help

> --clear-output Clear output of current file and save in place, overwriting the existing notebook.

Solution 8 - Python

Update with quoted comment by author for better visibility:

> Author's note "This project started before Jupyter's execute API, which is now the recommended way to run notebooks from the command-line. Consider runipy deprecated and unmaintained." – Sebastian Palma

Install runipy library that allows running your code on terminal

pip install runipy

After just compiler your code:

runipy <YourNotebookName>.ipynb

You can try cronjob as well. All information is here

Solution 9 - Python

I had the same problem and I found papermill. The advantages against the others solutions is that you can see the results while the notebook is running. I find this feature interesting when the notebook takes very long. It is very easy to use:

pip install papermill
papermill notebook.ipynb output.ipynb

It has also, other handy options as saving the output file to Amazon S3, Google Cloud, etc. See the page for more information.

Solution 10 - Python

You can also use the boar package to run your notebook within a python code.

from boar.running import run_notebook

outputs = run_notebook("nb.ipynb")

If you update your notebook, you won't have to convert it again to a python file.


More information at:

https://github.com/alexandreCameron/boar/blob/master/USAGE.md

Solution 11 - Python

From the terminal run

jupyter nbconvert --execute --to notebook --inplace --allow-errors --ExecutePreprocessor.timeout=-1 my_nb.ipynb

The default timeout is 30 seconds. -1 removes the restriction.

If you wish to save the output notebook to a new notebook you can use the flag --output my_new_nb.ipynb

Solution 12 - Python

You can also use jupytext https://jupytext.readthedocs.io/en/latest/index.html.

This allows you to pair your notebook. So for each ipynb file you have a .py file as well with some comments. The .py file can be executed as usual. You can enjoy benefits of two worlds with the cost of one extra file though.

Oh, and by the way if you are using version control you can only commit .py files with a nice diff instead of the ugly .ipynb diffs.

(The syntax in the .py files is similar to Databricks notebooks iy you are familiar with them...)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionVincentView Question on Stackoverflow
Solution 1 - PythonminrkView Answer on Stackoverflow
Solution 2 - PythonditkinView Answer on Stackoverflow
Solution 3 - PythonMartin PtacekView Answer on Stackoverflow
Solution 4 - PythonericView Answer on Stackoverflow
Solution 5 - PythonMurmelView Answer on Stackoverflow
Solution 6 - PythonVijay PanchalView Answer on Stackoverflow
Solution 7 - PythonalejandroView Answer on Stackoverflow
Solution 8 - PythonAxisView Answer on Stackoverflow
Solution 9 - Pythonpglez82View Answer on Stackoverflow
Solution 10 - PythonAlexView Answer on Stackoverflow
Solution 11 - PythonMohammad SView Answer on Stackoverflow
Solution 12 - PythonKen JiiiiView Answer on Stackoverflow