python typer show cli version

$ cat main.py

from __future__ import annotations

import re
from pathlib import Path

import typer

__version__ = "0.1.2"


cli = typer.Typer()


@cli.command(name="bump")
def bump_version() -> None:
    """Bump up version of this script"""
    typer.secho(f"Origin version: {__version__}", fg=typer.colors.BLUE)
    version_parts = [int(i) for i in __version__.split(".")]
    version_parts[-1] += 1
    new_version = ".".join(map(str, version_parts))
    me = Path(__file__)
    text = me.read_text("utf-8")
    pattern = re.compile(
        rf'(?P<prefix>__version__\s*=\s*[\'"]){__version__}(?P<suffix>[\'"])'
    )
    new = pattern.sub(rf"\g<prefix>{new_version}\g<suffix>", text)
    me.write_text(new)
    typer.secho(
        f"Updated {me.name} with new version: {new_version}", fg=typer.colors.MAGENTA
    )


def version_callback(value: bool) -> None:
    if value:
        typer.echo("My Awesome Cli Version: " + typer.style(__version__, bold=True))
        raise typer.Exit()


@cli.callback()
def main(
    version: bool = typer.Option(
        None,
        "--version",
        "-V",
        callback=version_callback,
        is_eager=True,
        help="Show the version of this script",
    ),
) -> None:
    pass


if __name__ == "__main__":
    cli()

image

posted @ 2025-08-07 10:43  waketzheng  阅读(7)  评论(0)    收藏  举报