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):
from execnb.nbio import * from execnb.shell import * from fastcore.utils 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 DEST] [--exc_stop] [--inject_code INJECT_CODE] [--inject_path INJECT_PATH] [--inject_idx INJECT_IDX] [--verbose] src Execute notebook from `src` and save with outputs to `dest` positional arguments: src Notebook path to read from optional arguments: -h, --help show this help message and exit --dest DEST Notebook path to write to (default: ) --exc_stop Stop on exceptions? (default: False) --inject_code INJECT_CODE Code to inject into a cell --inject_path INJECT_PATH Path to file containing code to inject into a cell --inject_idx INJECT_IDX Cell to replace with `inject_code` (default: 0) --verbose Show stdout/stderr during execution (default: False)