agoose77 / literary

Literate Python package development with Jupyter
BSD 3-Clause "New" or "Revised" License
11 stars 1 forks source link
jupyter literate-programming nbconvert notebooks python

Literary logo with an orange cursive uppercase L inside black square brackets

Literary

pypi-badge [binder-badge][binder] wiki-badge gitter-badge nbviewer

[binder]: https://mybinder.org/v2/gh/agoose77/literary/HEAD?urlpath=lab%2Ftree%2Fexamples

TL;DR

Literary is a Python tool to make Jupyter (IPython) notebooks behave like pure-Python packages. This allows pure-Python packages to be generated from notebooks, and notebooks to be imported at runtime. Literary now bootstraps itself; it is developed with Literary 🤯.

This package is an exploration of the literate programming idea pioneered by Donald Knuth and implemented in the nbdev package. Although nbdev looks to be a very mature and comprehensive tool, it resembles a significant departure from conventional package development. Literary is an exploration of what a smaller nbdev might look like.

Philosophy 📖

  1. Low mental overhead
    Realistically, most Python programmers that wish to write packages need to have some familiarity with the Python package development model, including the conventional structure of a package. For this reason, I feel that it is important to design literary such that these skills translate directly to designing libraries with notebooks
  2. Minimal downstream impact
    Users of literary packages should not realise that they are consuming notebook-generated code at runtime. This means that a pure-Python package needs to be generated from the notebooks, and it must use the conventional import model. For this reason, literary should only exist as a development dependency of the package.