Skip to main content

Reproducible report generation tool via Jupyter, Pandoc and Markdown.

Project description

Knitty

Build Status

Knitty is a Pandoc filter and Atom/Hydrogen-friendly reproducible report generation tool via Jupyter, Pandoc and Markdown (fork of the Stitch that is a Knitr-RMarkdown-like library in Python). Insert python code (or other Jupyter kernel code) to the Markdown document or write in plain Python/Julia/R/any-kernel-lang with block-commented Markdown and have code's results in the Pandoc output document.

See Knitty documentation. Reddit introduction post.

You can use:

Install

Install as part of Pandoctools - convenient interface and works out of the box.

Needs Python 3.6+ but you can have other versions via Jupyter kernels as Knitty can use any installed kernel.

Via conda:

conda install -c defaults -c conda-forge knitty

Via pip:

pip install knitty

Jupyter kernels

See important additional info on how to install Jupyter kernels in Conda environments.
See main info on how to install Jupyter kernels in the Atom/Hydrogen documentstion (for example).

Atom/Hydrogen

Knitty is much better to be used with something like Atom/Hydrogen. See Best Python/Jupyter/PyCharm experience + report generation with Pandoc filters for more details. You can also try VS Code interface to Jupyter from vscode-python instead of Atom/Hydrogen. I highly recommend to try to think about ipynb as merely an output format like pdf (albeit dynamic and rich) instead of main format or intermediate format.

Examples

You can see examples of using Knitty here. It's used together with some other CLI tools via Pandoctools there but cells management and options are from Knitty.

Also see example from Knitty documentstion.

Usage

You either can use Knitty as a standard Pandoc filter:

cat doc.md | pre-knitty | pandoc --filter knitty -o doc.ipynb

and specify some subset of Knitty options in metadata: self_contained: True, standalone: True. But this way you cannot switch from Markdown to RST for example.

Or you can set all Knitty options (including those in metadata) by using it as a Pandoc filter with multiple arguments. Knitty is intended to be used in Pandoctools bash profiles (so it's CLI is split-up) but you can easily use Knitty independently. You should only save and tweak shell script for this. There is a Bash example below. If on Windows I strongly recommend to install Git together with Bash.

./metadata.yaml:

---
kernels-map:
  r: ir
  py: python
styles-map:
  py: python
comments-map:
  py: ['#', "r'''", "'''", "'''", "'''", "r\"\"\"", "\"\"\"", "\"\"\"", "\"\"\""]
  js: ["//", "/*", "*/"]
  ts: ["//", "/*", "*/"]
  r: ['#', "'", "'", "\"", "\""]
...

./knitty:

#!/bin/bash
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export LANG=C.UTF-8
export PYTHONIOENCODING=utf-8

in="$1"
yml="$here/metadata.yaml"
R=(-f markdown)
W=(-t html --standalone --self-contained)

t="$(pandoc-filter-arg "${W[@]}")"
cat "$in" |
pre-knitty "$in" --yaml "$yml" |
cat "$yml" <(printf "\n\n") - |
pandoc "${R[@]}" -t json |
knitty $t "$in" "${R[@]}" "${W[@]}" |
pandoc -f json "${W[@]}" -o "$in.html"

($t is an arg that Pandoc passes to it's filters).

Then use it like ./knitty /path/to/doc.py that would save /path/to/doc.py.html.

Batch

And if you don't like Bash there is a Windows batch example below (see setvar):

chcp 65001 > NUL
set PYTHONIOENCODING=utf-8

set in=doc.md
set R=-f markdown
set W=-t html --standalone --self-contained

pandoc-filter-arg %W% | call .\setvar t
type "%in%" | pre-knitty | ^
pandoc %R% -t json | ^
knitty %t% "%in%" %R% %W% | ^
pandoc -f json %W% -o "%in%.html"

To ipynb

Before v0.5.0 Knitty supported conversion to .ipynb via Notedown but since v0.5.0 it is adapted to be used with Pandoc >=2.6. You can learn how to convert to ipynb via Pandoc here (optionally: install Pandoc in Python). I also recommend using knitty.self_contained_raw_html_img Panflute filter (see here) to fix Pandoc attachments created when to .ipynb conversion.

Using with pandoc-crossref

Worth mentioning that you can use Knitty together with pandoc-crossref (see install instructions). You may also need to tune output format in Pandoc and execute the notebook. See example without Knitty:

pandoc doc.md --filter pandoc-crossref --to "ipynb-bracketed_spans-fenced_divs\
-link_attributes-simple_tables-multiline_tables-grid_tables-pipe_tables\
-fenced_code_attributes-markdown_in_html_blocks-table_captions-smart" | \
jupyter nbconvert --to notebook --execute --stdin --stdout > doc.ipynb

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

knitty-0.6.1.tar.gz (40.5 kB view details)

Uploaded Source

File details

Details for the file knitty-0.6.1.tar.gz.

File metadata

  • Download URL: knitty-0.6.1.tar.gz
  • Upload date:
  • Size: 40.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/0.0.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0.post20201006 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.7.9

File hashes

Hashes for knitty-0.6.1.tar.gz
Algorithm Hash digest
SHA256 3c20125194cef1b50319f793c1760dd9002d9132ac37bd4e265b6e515cb6c8cc
MD5 aea31c575e8b4e00350feda2a10a6a62
BLAKE2b-256 c8320d3edd14166ac8211f21ea55d1ca1bf5a2b4aeb62b95a9614c6e3f6bd5fa

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page