Either:
pip install execnb
or if you use conda:
conda install -c fastai execnb
(You can replace conda with mamba in the line above if you have mamba installed.)
Use CaptureShell to run Jupyter code and capture notebook outputs, without running a Jupyter server (or even having it installed). The API is sync – each shell runs cells on its own private event loop in a background thread, so it works the same from a script, a notebook, or an async server, and cells may use top-level await:
from execnb.shell import *
from fastcore.utils import *
from fastcore.nbio import *s = CaptureShell()
s.run('1+1')[{'data': {'text/plain': ['2']},
'metadata': {},
'output_type': 'execute_result',
'execution_count': 1}]
To execute a notebook and save it with outputs filled in, use CaptureShell.execute:
try:
s.execute('../tests/clean.ipynb', 'tmp.ipynb')
print(read_nb('tmp.ipynb').cells[1].outputs)
finally: Path('tmp.ipynb').unlink()[{'name': 'stdout', 'output_type': 'stream', 'text': '1\n'}, {'data': {'text/plain': '2'}, 'execution_count': 3, 'metadata': {}, 'output_type': 'execute_result'}]
You can also execute notebooks from the command line with exec_nb:
!exec_nb --helpusage: exec_nb [-h] [--dest (str)] [--exc-stop] [--inject-code (str)]
[--inject-path (str)] [--inject-idx (int)] [--verbose]
[--cell-timeout (int)]
src
Execute notebook from `src` and save with outputs to `dest`
positional arguments:
src Notebook path to read from
options:
-h, --help show this help message and exit
--dest (str) Notebook path to write to (default: '')
--exc-stop Stop on exceptions? (default: False)
--inject-code (str) Code to inject into a cell
--inject-path (str) Path to file containing code to inject into a cell
--inject-idx (int) Cell to replace with `inject_code` (default: 0)
--verbose Show stdout/stderr during execution (default: False)
--cell-timeout (int) Seconds before each cell times out (None: no limit)
execnb 0.3.4