Running an IPython/Jupyter notebook non-interactively
Run and replace original .ipunb file:
jupyter nbconvert --ExecutePreprocessor.timeout=-1 --to notebook --inplace --execute original.ipynb
Until this functionality becomes part of the core, I put together a little command-line app that does just what you want. It's called runipy and you can install it with pip install runipy
. The source and readme are on github.
Yes it is possible, and easy, it will (mostly) be in IPython core for 2.0, I would suggest looking at those examples for now.
[edit]
$ jupyter nbconvert --to notebook --execute original.ipynb --output=new.ipynb
It is now in Jupyter NbConvert. NbConvert comes with a bunch of Preprocessor
s that are disabled by default, two of them (ClearOutputPreprocessor
and ExecutePreprocessor
) are of interest. You can either enabled them in your (local|global) config file(s) via c.<PreprocessorName>.enabled=True
(Uppercase that's python), or on the command line with --ExecutePreprocessor.enabled=True
keep the rest of the command as usual.
The --ExecutePreprocessor.enabled=True
has convenient --execute
alias that can be used on recent version of NbConvert. It can be combine with --inplace
if desired
For example, convert to html after running the notebook headless :
$ jupyter nbconvert --to=html --execute RunMe.ipynb
converting to PDF after stripping outputs
$ ipython nbconvert --to=pdf --ClearOutputPreprocessor.enabled=True RunMe.ipynb
This (of course) does work with non-python kernels by spawning a <insert-your-language-here>
kernel, if you set --profile=<your fav profile>
. The conversion can be really long as it needs to rerun the notebook. You can do notebook to notebook conversion with the --to=notebook
option.
There are various other options (timeout, allow errors, ...) that might need to be set/unset depending on use case. See documentation and of course jupyter nbconvert --help
, --help-all
, or nbconvert online documentation for more information.
To cover some features such as parallel workers, input parameters, e-mail sending or S3 input/output... you can install jupyter-runner
pip install jupyter-runner
Readme on github: https://github.com/omar-masmoudi/jupyter-runner