Build and publish python packages from marimo notebooks
Project description
marimo_dev
A literate programming build system that converts Marimo notebooks into distributable Python packages. Inspired by nbdev.
What it does
Looks in /notebooks dir for self contained functions and classes and extracts them into a PyPI ready directory. Each notebook will be striped of the leading ##_, and XX_ and test notebooks will be ignored. Run md build to generate a proper Python package with __init__.py, module files, and llms.txt API documentation.
What it does not
An intentional effort to minimise magic project set up. You are responsible for setting up your pyproject.toml, and even mkdir notebooks.
Note: I highly reccommend that you use uv my main motivation for making this was the dependency harmony betwwen marimo and uv
Project structure
my-project/
├── README.md
├── pyproject.toml
├── notebooks/
│ ├── 01_core.py
│ ├── 02_read.py
│ ├── ...
├── src/ # auto created
│ └── my_package/
│ ├── __init__.py
│ ├── core.py
│ ├── read.py
│ └── ...
├── docs/ # auto created
│ ├── index.html # Fut ver. 0.2
│ └── llms.txt
└── dist/ # auto created
└──...
How it works
The build system parses notebooks via AST, extracts decorated exports (@app.function, @app.class_definition), and writes clean module files. It reads metadata from pyproject.toml and generates __init__.py with proper imports and __all__ exports.
The llms.txt file contains function signatures with inline documentation extracted from comments, formatted for LLM consumption. This provides a compact API reference.
Note: this will work much better with fastcore.docments style function definitions
CLI usage
md build # build package from notebooks/
md publish # publish to PyPI
md publish --test # publish to Test PyPI
Requirements
- Python 3.12+, Marimo, uv, pyproject.toml
- for relative imports to work in multi module libraries add the following to your pyproject.tml
-
</code></pre> </li> </ul> pythonpath = ["src"] ```</li> </ul> <p><strong>Tip</strong> <em>let marimo manages your <code>pyproject.toml</code> through its package tab, making dependencies visible and easy to update. When you add packages and remove them from the marimo package tab marimo will automaticly update your pyproject.toml</em></p> <h2>Install</h2> <pre lang="bash"><code>uv add marimo-dev
Helpful
uv sync --upgrade` # to update uv.lock and pyroject.toml in one go... uv cache clean # General Trouble Shooting Tip
- you need to manually update the version in pyproject.toml
Module structure
core.py- Data model:Kind,Param,Noderead.py- Parse notebooks, extract exports, scan projectpkg.py- Write module files and__init__.pydocs.py- Generate signatures andllms.txtbuild.py- Orchestrate the buildcli.py- Command-line interface
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file marimo_dev-0.1.11.tar.gz.
File metadata
- Download URL: marimo_dev-0.1.11.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux ARM","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a226c12edc9b3500fe954535ca1e94454d3353ce169f65459241fa456b67fb2
|
|
| MD5 |
0b6de9847ee8e63fbb25c35303ca3dd5
|
|
| BLAKE2b-256 |
d5acf7d72de6d4f7f75a8c3f688868c69073fbe0f164b99bac239d4a5d0d7b9b
|
File details
Details for the file marimo_dev-0.1.11-py3-none-any.whl.
File metadata
- Download URL: marimo_dev-0.1.11-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux ARM","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6e7ac1897e0c5f981e3890c607115247654ef4a64c96bc73350e6f5019ec73d
|
|
| MD5 |
ca64b9510cd39c221be67f59a738b06a
|
|
| BLAKE2b-256 |
e8384c44193d401b1116b8eb1d6e7fd2ac65614c97162707e693021fa6540409
|