Klak provides the ergonoics of a project Makefile with the ease of Python and power of Click.
Makefiles provide a simple interface, make <command>
, that is great for automating repetitive project tasks. Makefile syntax, however, is archaic, error-prone, and ill-suited for constructing modern, useful command-line interfaces.
Python, on the other hand, has wonderful syntax and is great for scripting. When Python is paired with Click constructing modern, useful command-line interfaces is easy!
Is there a way we can combine the power of Python and Click into a "Makefile like" experience?
Enter Klak.
Klak exposes a single entry-point—klak
—which auto-loads a 100%, vanilla Python file called a Clickfile. All CLI is built using standard Python and Click, and all commands are available via: klak <command>
(see Usage).
Klak's purpose is to provide a convenient, single-file experince for automating repetitive project tasks. It does not, nor will it ever, intend to replace Make or Makefiles.
# NOTE: This is the recommended method of installation.
pip install klak
Klak uses Poetry to manage depdencies and distribution (in lieu of setuptools).
# NOTE: Clone the public repository
git clone git://github.com/aubricus/klak
# NOTE: or download the tarball
curl -OL https://github.com/aubricus/klak/tarball/master
# NOTE: Once the source is downloaded
poetry install
To get started with Klak create a Clickfile. Here's a simple Clickfile to get started:
"""
Example Clickfile.
NOTE: Set your editor's language mode to Python to
enable syntax highlighting! :^)
"""
import logging
import click
from klak.cli import cli
log = logging.getLogger("Clickfile")
# -------------------------------------
# Examples
# -------------------------------------
# Example: Add a command.
@cli.command()
@click.argument("name")
def greet(name):
"""Greet someone."""
click.secho(f"Hello, {name}")
# Example: Add a group and sub-command.
@cli.group()
def humans():
"""Humans command group."""
pass
@humans.command(name="count")
def humans_count():
"""Count all the humans."""
click.secho("Over 9000!!!")
NOTE: You can also organize commands into a python package in the same directory. See Klak/Pull/229.
Once your Clickfile is ready, access commands through klak
.
$ klak --help
This project is a hobby/passion project which I maintain in my own time.
- Python 3.5+
- Linux ✓
- MacOS ✓
- Windows ✘ (any volunteers?)
PRs accepted!
Please note, if editing the README, please conform to the standard-readme specification.