Stouputils is a collection of utility modules designed to simplify and enhance the development process.
It includes a range of tools for tasks such as execution of doctests, display utilities, decorators, as well as context managers.
Start now by installing the package: pip install stouputils.
Stouputils provides a powerful command-line interface. Here's a quick example for each subcommand:
# Show version information of polars with dependency tree of depth 3
stouputils --version polars -t 3
# Run all doctests in a directory with pattern filter (fnmatch)
stouputils all_doctests "./src" "*_test"
# Repair a corrupted/obstructed zip archive
stouputils repair "./input.zip" "./output.zip"
# Create a delta backup
stouputils backup delta "./source" "./backups"
# Build and publish to PyPI (with minor version bump and no stubs)
stouputils build minor --no_stubs
# Generate changelog from git history (since a specific date, with commit URLs from origin remote, output to file)
stouputils changelog date "2026-01-01" -r origin -o "CHANGELOG.md"📖 See the Extensive CLI Documentation section below for detailed usage and all available options.
<style> .code-tree { border-radius: 6px; padding: 16px; font-family: monospace; line-height: 1.45; overflow: auto; white-space: pre; background-color:rgb(43, 43, 43); color: #d4d4d4; } .code-tree a { color: #569cd6; text-decoration: none; } .code-tree a:hover { text-decoration: underline; } .code-tree .comment { color:rgb(231, 213, 48); } .code-tree .paren { color: orange; } </style>
stouputils/ ├── print.py # 🖨️ Utility functions for printing (info, debug, warning, error, whatisit, breakpoint, colored_for_loop, ...) ├── decorators.py # 🎯 Decorators (measure_time, handle_error, timeout, retry, simple_cache, abstract, deprecated, silent) ├── ctx.py # 🔇 Context managers (LogToFile, MeasureTime, Muffle, DoNothing, SetMPStartMethod) ├── io.py # 💾 Utilities for file management (json_dump, json_load, csv_dump, csv_load, read_file, super_copy, super_open, clean_path, ...) ├── parallel.py # 🔀 Utility functions for parallel processing (multiprocessing, multithreading, run_in_subprocess) ├── image.py # 🖼️ Little utilities for image processing (image_resize, auto_crop, numpy_to_gif, numpy_to_obj) ├── collections.py # 🧰 Utilities for collection manipulation (unique_list, at_least_n, sort_dict_keys, upsert_in_dataframe, array_to_disk) ├── typing.py # 📝 Utilities for typing enhancements (IterAny, JsonDict, JsonList, ..., convert_to_serializable) ├── all_doctests.py # ✅ Run all doctests for all modules in a given directory (launch_tests, test_module_with_progress) ├── backup.py # 💾 Utilities for backup management (delta backup, consolidate) ├── archive.py # 📦 Functions for creating and managing archives │ ├── applications/ │ ├── automatic_docs.py # 📚 Documentation generation utilities (used to create this documentation) │ ├── upscaler/ # 🔎 Image & Video upscaler (configurable) │ └── ... │ ├── continuous_delivery/ │ ├── cd_utils.py # 🔧 Utilities for continuous delivery │ ├── git.py # 📜 Utilities for local git changelog generation │ ├── github.py # 📦 Utilities for continuous delivery on GitHub (upload_to_github) │ ├── pypi.py # 📦 Utilities for PyPI (pypi_full_routine) │ ├── pyproject.py # 📝 Utilities for reading, writing and managing pyproject.toml files │ ├── stubs.py # 📝 Utilities for generating stub files using stubgen │ └── ... │ ├── data_science/ │ ├── config/ # ⚙️ Configuration utilities for data science │ ├── dataset/ # 📊 Dataset handling (dataset, dataset_loader, grouping_strategy) │ ├── data_processing/ # 🔄 Data processing utilities (image augmentation, preprocessing) │ │ ├── image/ # 🖼️ Image processing techniques │ │ └── ... │ ├── models/ # 🧠 ML/DL model interfaces and implementations │ │ ├── keras/ # 🤖 Keras model implementations │ │ ├── keras_utils/ # 🛠️ Keras utilities (callbacks, losses, visualizations) │ │ └── ... │ ├── scripts/ # 📜 Data science scripts (augment, preprocess, routine) │ ├── metric_utils.py # 📏 Static methods for calculating various ML metrics │ ├── mlflow_utils.py # 📊 Utility functions for working with MLflow │ └── ... │ ├── installer/ │ ├── common.py # 🔧 Common functions used by the Linux and Windows installers modules │ ├── downloader.py # ⬇️ Functions for downloading and installing programs from URLs │ ├── linux.py # 🐧 Linux/macOS specific implementations for installation │ ├── main.py # 🚀 Core installation functions for installing programs from zip files or URLs │ ├── windows.py # 💻 Windows specific implementations for installation │ └── ... └── ...
pip install stouputilsFor a better CLI experience, enable bash tab completion:
# Option 1: Using argcomplete's global activation
activate-global-python-argcomplete --user
# Option 2: Manual setup for bash
register-python-argcomplete stouputils >> ~/.bashrc
source ~/.bashrcAfter enabling completion, you can use <TAB> to autocomplete commands:
stouputils <TAB> # Shows: --version, -v, all_doctests, backup
stouputils all_<TAB> # Completes to: all_doctestsNote: Tab completion works best in bash, zsh, Git Bash, or WSL on Windows.
The stouputils CLI provides several powerful commands for common development tasks.
stouputils <command> [options]Running stouputils without arguments displays help with all available commands.
Display the version of stouputils and its dependencies, along with the used Python version.
# Basic usage - show stouputils version
stouputils --version
stouputils -v
# Show version for a specific package
stouputils --version numpy
stouputils -v requests
# Show dependency tree (depth 3+)
stouputils --version -t 3
stouputils -v stouputils --tree 4Options:
| Option | Description |
|---|---|
[package] |
Optional package name to show version for (default: stouputils) |
-t, --tree <depth> |
Show dependency tree with specified depth (≤2 for flat list, ≥3 for tree view) |
Execute all doctests in Python files within a directory.
# Run doctests in current directory
stouputils all_doctests
# Run doctests in specific directory
stouputils all_doctests ./src
# Run doctests with file pattern filter
stouputils all_doctests ./src "*image/*.py"
stouputils all_doctests . "*utils*"Arguments:
| Argument | Description |
|---|---|
[directory] |
Directory to search for Python files (default: .) |
[pattern] |
Glob pattern to filter files (default: *) |
Exit codes:
0: All tests passed1: One or more tests failed
Create and repair ZIP archives.
# Show archive help
stouputils archive --help# Basic archive creation
stouputils archive make ./my_folder ./backup.zip
# Create archive with ignore patterns
stouputils archive make ./project ./project.zip --ignore "*.pyc,__pycache__,*.log"
# Create destination directory if needed
stouputils archive make ./source ./backups/archive.zip --create-dirArguments & Options:
| Argument/Option | Description |
|---|---|
<source> |
Source directory to archive |
<destination> |
Destination zip file path |
--ignore <patterns> |
Comma-separated glob patterns to exclude |
--create-dir |
Create destination directory if it doesn't exist |
# Repair with auto-generated output name
stouputils archive repair ./corrupted.zip
# Repair with custom output name
stouputils archive repair ./corrupted.zip ./fixed.zipArguments:
| Argument | Description |
|---|---|
<input_file> |
Path to the corrupted zip file |
[output_file] |
Path for repaired file (default: adds _repaired suffix) |
Create delta backups, consolidate existing backups, and manage backup retention.
# Show backup help
stouputils backup --helpCreate an incremental backup containing only new or modified files since the last backup.
# Basic delta backup
stouputils backup delta ./my_project ./backups
# Delta backup with exclusions
stouputils backup delta ./project ./backups -x "*.pyc" "__pycache__/*" "node_modules/*"
stouputils backup delta ./source ./backups --exclude "*.log" "temp/*"Arguments & Options:
| Argument/Option | Description |
|---|---|
<source> |
Source directory or file to back up |
<destination> |
Destination folder for backups |
-x, --exclude <patterns> |
Glob patterns to exclude (space-separated) |
Merge multiple delta backups into a single complete backup.
# Consolidate all backups up to latest.zip into one file
stouputils backup consolidate ./backups/latest.zip ./consolidated.zipArguments:
| Argument | Description |
|---|---|
<backup_zip> |
Path to the latest backup ZIP file |
<destination_zip> |
Path for the consolidated output file |
Limit the number of delta backups by consolidating the oldest ones.
# Keep only the 5 most recent backups
stouputils backup limit 5 ./backups
# Allow deletion of the oldest backup (not recommended)
stouputils backup limit 5 ./backups --no-keep-oldestArguments & Options:
| Argument/Option | Description |
|---|---|
<max_backups> |
Maximum number of backups to keep |
<backup_folder> |
Path to the folder containing backups |
--no-keep-oldest |
Allow deletion of the oldest backup (default: keep it) |
Build and publish a Python package to PyPI using the uv tool. This runs a complete routine including version bumping, stub generation, building, and publishing.
# Standard build and publish (bumps patch by default)
stouputils build
# Build without generating stubs and without bumping version
stouputils build --no_stubs --no_bump
# Bump minor version before build
stouputils build minor
# Bump major version before build
stouputils build majorOptions:
| Option | Description |
|---|---|
--no_stubs |
Skip stub file generation |
--no_bump |
Skip version bumping (use current version) |
minor |
Bump minor version (e.g., 1.2.0 → 1.3.0) |
major |
Bump major version (e.g., 1.2.0 → 2.0.0) |
Generate a formatted changelog from local git history.
# Show changelog help
stouputils changelog --help# Generate changelog since latest tag (default)
stouputils changelog
# Generate changelog since a specific tag
stouputils changelog tag v1.9.0
# Generate changelog since a specific date
stouputils changelog date 2026/01/05
stouputils changelog date "2026-01-15 14:30:00"
# Generate changelog since a specific commit
stouputils changelog commit 847b27e
# Include commit URLs from a remote
stouputils changelog --remote origin
stouputils changelog tag v2.0.0 -r origin
# Output to a file
stouputils changelog -o CHANGELOG.md
stouputils changelog tag v1.0.0 --output docs/CHANGELOG.mdArguments & Options:
| Argument/Option | Description |
|---|---|
[mode] |
Mode for selecting commits: tag, date, or commit (default: tag) |
[value] |
Value for the mode (tag name, date, or commit SHA) |
-r, --remote <name> |
Remote name for commit URLs (e.g., origin) |
-o, --output <file> |
Output file path (default: stdout) |
Supported date formats:
YYYY/MM/DDorYYYY-MM-DDDD/MM/YYYYorDD-MM-YYYYYYYY-MM-DD HH:MM:SS- ISO 8601:
YYYY-MM-DDTHH:MM:SS
| Command | Description |
|---|---|
stouputils -v |
Show version |
stouputils -v numpy -t 3 |
Show numpy version with dependency tree |
stouputils all_doctests ./src |
Run doctests in src directory |
stouputils archive make ./proj ./proj.zip |
Create archive |
stouputils archive repair ./bad.zip |
Repair corrupted zip |
stouputils backup delta ./src ./bak -x "*.pyc" |
Create delta backup |
stouputils backup consolidate ./bak/latest.zip ./full.zip |
Consolidate backups |
stouputils backup limit 5 ./bak |
Keep only 5 backups |
stouputils build minor |
Build with minor version bump |
stouputils changelog tag v1.0.0 -r origin -o CHANGELOG.md |
Generate changelog to file |