The nbless
Python package allows you to (de)construct, convert, and execute Jupyter Notebooks in
- your terminal (e.g.
bash
,zsh
,fish
, etc.) or - your favorite Python environment (e.g. PyCharm or Visual Studio Code).
The nbless
Python package consists of 6 Python functions and shell commands:
- nbconv, which converts a notebook into various formats.
- nbdeck, which prepares a notebook to be viewed as or converted into slides.
- nbexec, which runs a notebook from top to bottom and saves an executed version.
- nbless, which calls
nbuild
andnbexec
to create and execute a notebook. - nbraze, which extracts code and markdown files from a notebook.
- nbuild, which creates a notebook from source files, e.g. Python (
.py
) and R (.R
) scripts, markdown (.md
), and text (.txt
) files.
For a related package that provides programmatic tools for working with R Markdown (Rmd) files, check out the Rmdawn Python package.
The documentation is hosted at https://py4ds.github.io/nbless/.
The code is hosted at https://github.com/py4ds/nbless.
or clone the repo, e.g. git clone https://github.com/py4ds/nbless
and install locally using setup.py (python setup.py install
) or pip
(pip install .
).
The nbconv
shell command can export a notebook to many different formats using the nbconvert
library. Converting to all formats except HTML requires pandoc. Exporting to PDF requires LaTeX.
The supported exporters are
asciidoc
html
latex
markdown
python
rst
script
slides
For example, nbconv
can create a python script by extracting the content from code cells and discarding all output and markdown content.
In the example above, the notebook would be printed to the screen (stdout
), but you can create or overwrite a notebook files with the --out_file
or -o
flag:
If the exporter
is not provided, nbconv
will try to infer the exporter type from the out_file
extension.
If neither the exporter
or out_file
arguments are provided, the exporter will be set to html.
Unlike the shell command, the nbconv
Python function does not create a file on its own. To create a converted file with Python, use the pathlib
library.
from pathlib import Path
from nbless import nbconv
# Create notebook.py from notebook.ipynb
filename, contents = nbconv("notebook.ipynb", "python")
Path(filename).write_text(contents)
# Create report.html from notebook.ipynb
filename, contents = nbconv("notebook.ipynb", "html")
Path('report.html').write_text(contents)
With nbdeck
, you can prepare HTML slides from a Jupyter notebook.
You can run nbdeck
without nbconv
, if you do not want to create HTML slides and instead want to use nbviewer or the RISE extension. If an out_file
name is not provided, the notebook file contents will be printed. You can provide a more descriptive name for the executed output notebook with the --out_file
or -o
flag or by redirecting the output to a file with >
.
Unlike the shell command, the nbdeck
Python function does not create a file on its own. To create a converted file, use the nbformat
and pathlib
libraries.
The nbexec
command runs the input notebook from top to bottom. If an out_file
name is not provided, the executed notebook contents will be printed to the screen (stdout
). This can be useful for previewing the output.
You can create or overwrite a notebook file with the --out_file
or -o
flag or by redirecting the output to a file with >
.
The default kernel is python3
, but it is possible to specify the kernel that will be used to run notebook with the --kernel
or -k
flag as in the example with the IRkernel below.
Unlike the shell command, the nbexec
Python function does not create a file on its own. To create a notebook file, use the nbformat
library.
The nbless
shell command executes a notebook created from code and markdown/text files.
The default kernel is python3
, but it is possible to specify the kernel that will be used to run notebook with the --kernel
or -k
flag.
Instead of redirecting to a file (>
), you can use the --out_file
or -o
flag:
Unlike the shell command, the nbless
Python function does not create a file on its own. To create a notebook file, use the nbformat
library.
The nbraze
shell command takes the contents of Jupyter Notebook code cells and turns them into code files, e.g. Python or R code files (.py
or .R
). The contents of markdown cells are turned into markdown files.
The default code file extension for nbraze
is py
, but it is possible to set the file extension with the --extension
or -e
flag. If the language_info
key is defined in the Jupyter notebook metadata, nbraze
can try to infer the code file extension from the programming language.
The nbuild
shell command takes the contents of Python or R code files (.py
or .R
) and stores them as Jupyter Notebook code cells. The contents of all other files are stored in markdown cells.
Instead of redirecting to a file (>
), you can use the --out_file
or -o
flag:
You can preview the raw notebook output by running nbuild
with only the positional arguments:
The nbuild
Python function does not create a file on its own. To create a notebook file, use the nbformat
library.
The packages listed above can all convert Jupyter notebooks to other formats:
- markdown files (all three) or
- Python scripts (
jupytext
).
Nbless wraps jupyter nbconvert to convert notebooks to other file types, but it can do something all of the aforementioned packages cannot. Nbless can take a more modular approach to file conversion by extracting the contents of each notebook cell into a separate file (cell -> file) or using a source file to create each notebook cell (file -> cell). Looking beyond simple file conversion, Nbless includes a tool for making slides from notebooks (by setting slide_type
in notebook metadata).
Currently, notebook metadata is lost when using nbraze
/nbuild
/nbless
.
- Enable
nbuild
/nbless
to accept metadata via ametadata.json
file. - Enable
nbraze
to output metadata via ametadata.json
file.