from execnb.shell import *
from fastcore.utils import *
from fastcore.nbio import *execnb
Execute a jupyter notebook, fast, without needing jupyter
Install
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.)
How to use
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:
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