CLI tool for executing Quarto cells through a Jupyter kernel
Project description
qkernel
A CLI tool for executing Quarto (.qmd) code cells through a Jupyter kernel.
Features
- Execute Quarto cells from the command line with live output
- Persistent kernel sessions - start a kernel once, run cells across multiple invocations
- Automatic virtual environment detection - uses
.venvin your project automatically - Cell selection - run specific cells by index or label
- Image saving - automatically saves generated images to cache directory
- Animated progress - shows live spinner and timing for each cell
Installation
With uv (recommended)
uv tool install qkernel
With pip
pip install qkernel
Requirements
- Python 3.10+
ipykernelmust be installed in the target Python environment
Usage
Running Cells
# Run all cells in a file
qkernel run notebook.qmd
# Run specific cells by index (0-based)
qkernel run notebook.qmd --cells 0,2,5
# Run specific cells by label
qkernel run notebook.qmd --cells setup,analysis,plot
# Mix indices and labels
qkernel run notebook.qmd --cells 0,setup,2
# Set execution timeout (in seconds)
qkernel run notebook.qmd --timeout 600
Persistent Kernel Sessions
For faster iteration, start a kernel that persists across runs:
# Start a background kernel
qkernel start
# Run cells (uses the persistent kernel)
qkernel run notebook.qmd --cells setup
qkernel run notebook.qmd --cells analysis # Variables from setup are available
# Check kernel status
qkernel status
# Restart the kernel (clears state)
qkernel restart
# Stop the kernel when done
qkernel stop
Verbose Mode
Enable debug logging with -v:
qkernel -v run notebook.qmd
Python Environment Resolution
qkernel automatically detects which Python to use for the kernel, following this order:
QUARTO_PYTHON- Environment variable (path to Python executable or venv directory)VIRTUAL_ENV- Activated virtual environment.venv- Virtual environment in current directory or any parent directory- System Python - Fallback
This means if you have a .venv in your project root, qkernel will use it automatically even when running from a subdirectory.
# Explicit Python
QUARTO_PYTHON=/path/to/python qkernel run notebook.qmd
# Uses activated venv
source .venv/bin/activate
qkernel run notebook.qmd
# Auto-detects .venv in project
cd /project/src/deep/folder
qkernel run ../../../notebook.qmd # Uses /project/.venv
Output Format
qkernel shows clean, informative output with timing:
Kernel started (/path/to/python)
● ━━ [0] setup ━━━━━━━━━━━━━━━━━━━━━━━━━━ ✓ 23ms
Loading data...
Done!
● ━━ [1] analysis ━━━━━━━━━━━━━━━━━━━━━━━ ✓ 1205ms
Processing 1000 rows
Results: [1, 2, 3, 4, 5]
● ━━ [2] plot ━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✓ 89ms
[Image: ~/.cache/qkernel/notebook/plot/output.png]
Kernel stopped
══════════════════════════════════════════════════
Executed 3 cell(s) • 1 image(s) saved
→ /Users/you/.cache/qkernel/notebook/plot/output.png
In interactive terminals, a spinner animates while cells are running.
Image Caching
Images generated by cells are saved to ~/.cache/qkernel/<filename>/<cell_label>/:
~/.cache/qkernel/
└── notebook/
├── plot/
│ └── output.png
└── visualization/
├── output_0.png
└── output_1.png
The cache is cleared before each run to ensure fresh output.
Cell Labels
qkernel recognizes cell labels from Quarto's YAML-style comments:
```{python}
#| label: setup
import pandas as pd
data = pd.read_csv("data.csv")
```
```{python}
#| label: analysis
results = data.groupby("category").sum()
print(results)
```
Use these labels to run specific cells: qkernel run file.qmd --cells setup,analysis
Development
# Install with dev dependencies
uv pip install -e ".[dev]"
# Run tests
pytest tests/ -v
# Run with timeout
pytest tests/ -v --timeout=60
License
MIT
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 qkernel-0.1.1.tar.gz.
File metadata
- Download URL: qkernel-0.1.1.tar.gz
- Upload date:
- Size: 115.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b228acca487fe5fc7941762fba0ee81789f35d6c054827d62141ee37699d2534
|
|
| MD5 |
be6a3bd3d75993d7daf667516aa0f812
|
|
| BLAKE2b-256 |
509b12701c6707add9c93db688dd028ac4ec0e5bf2e96fb226d84c7aa94fa55c
|
File details
Details for the file qkernel-0.1.1-py3-none-any.whl.
File metadata
- Download URL: qkernel-0.1.1-py3-none-any.whl
- Upload date:
- Size: 15.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c77f51852a0726ecb4cbdbd6766ea6f717769544d11fde7920c5186bfdfe5d8d
|
|
| MD5 |
8c28ffc10df11a6171e367897ab45415
|
|
| BLAKE2b-256 |
9c05573d722054c941a0b3df8bc30627ef6ad444cd2c282be1c5383ec6d6e0ed
|