cli tools are super handy and easy to add to your python libraries to supercharge them. Even if your library is not a cli tool there are a number of things that a cli can do to your library.

Example Ideas

Things a cli can do to enhance your library.

๐Ÿ†š print version ๐Ÿ•ถ print readme ๐Ÿ“ print changelog ๐Ÿ“ƒ print config โœ change config ๐Ÿ‘ฉโ€๐ŸŽ“ run a tutorial ๐Ÿ— scaffold a project with cookiecutter

๐Ÿ–ฑ Click

Click is the most popular python cli tool framework for python. There are others, some old, some new comers that make take the crown. For now Click is the gold standard if you want to make a powerful cli quickly. If you are dependency conscious and dont need a lot of tooling, use argparse.

Project Structure

.
โ”œโ”€โ”€ setup.py
โ””โ”€โ”€ simple_click
    โ”œโ”€โ”€ cli.py
    โ””โ”€โ”€ __init__.py

โฏ cli.py


    # simple_click/cli.py
    import click

    __version__ = "1.0.0"

    @click.group()
    def cli():
       pass

    @cli.command()
    def version():
        """prints project version"""
        click.echo(__version__)


    if __name__ == '__main__':
        cli()

โœจ init.py

For our simple_click library __init__.py__ can be left empty. It is here purely to signify that simple_click is a library. It is likely that you will import other modules here that need to reside at the top level of your library api, your cli does not need to be at the top of of your api.


    # __init__.py

๐Ÿšช Entry Points

Entry points are the magic that make python cli tools available as their own command without having python before it or the file extension.


    # setup.py

    from setuptools import setup, find_packages

    # this is the ๐Ÿฅฉ meat of this snippet
    # simple_click is the command name
    # = simple_click is the library name
    # .cli is the cli.py file
    # :cli is the cli function
    #
    # the second item is a shorthand alias to the main command

    entry_points = [
       "simple_click = simple_click.cli:cli",
       "scli         = simple_click.cli:cli",
    ]


    setup(
        name='simple_click',
        version='1.0.0',
        url='https://github.com/mypackage.git',
        packages=find_packages(),
        entry_points={"console_scripts": entry_points},

    )

๐Ÿ•ถ See it in action

Simple-click-in-action

๐Ÿ“ข Discuss

What do You wish more python libraries included in their cli? Tweet it @_waylonwalker

Tweet it @_waylonwalker