목차

, , , ,

Click

decorator 조합으로 command, option, argument, group을 구성하는 Python CLI framework다.

Summary

Installation

공식 문서는 virtual environment에서 PyPI package를 설치하도록 안내한다.

# Linux / macOS
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install click
python3 -c "import importlib.metadata; print(importlib.metadata.version('click'))"
# Windows PowerShell
py -m venv .venv
.venv\Scripts\Activate.ps1
py -m pip install click
py -c "import importlib.metadata; print(importlib.metadata.version('click'))"

Click가 공식적으로 별도 안내하는 APT, DNF/YUM, Homebrew, winget package는 없다. Python project dependency로 설치한다.

Usage

import click
 
@click.command()
@click.argument("name")
@click.option("--count", default=1, type=int, show_default=True)
@click.option("--verbose", is_flag=True, help="상세 출력")
def hello(name: str, count: int, verbose: bool):
    """NAME에게 인사합니다."""
    if verbose:
        click.echo(f"count={count}", err=True)
    for _ in range(count):
        click.echo(f"Hello, {name}!")
 
if __name__ == "__main__":
    hello()
python3 hello.py --help
python3 hello.py World --count 2 --verbose

Commands and Groups

import click
 
@click.group()
def cli():
    """프로젝트 관리 CLI."""
 
@cli.command()
@click.argument("name")
def init(name: str):
    """새 프로젝트를 생성합니다."""
    click.echo(f"Initialized {name}")
 
@cli.command(deprecated=True)
def cleanup():
    """이전 cache를 정리합니다."""
    click.echo("Cleaned")
 
if __name__ == "__main__":
    cli()

Common API

Environment Variables

@click.command()
@click.option("--username", envvar="APP_USERNAME", required=True)
def greet(username):
    click.echo(f"Hello {username}")
APP_USERNAME=alice python3 app.py

group 전체에는 auto_envvar_prefix를 적용할 수 있다. 명시적 command-line 값과 환경 변수의 우선순위를 함께 문서화한다.

Packaging

설치 가능한 CLI는 pyproject.toml의 entry point로 연결한다.

[project]
name = "hello-cli"
version = "0.1.0"
dependencies = ["click>=8.1"]
 
[project.scripts]
hello = "hello_cli.main:hello"
python3 -m pip install -e .
hello --help

Troubleshooting

Compatibility

Help

Click 자체의 공통 click –help 명령은 없다. 작성한 command마다 자동 생성되는 help를 확인한다.

python3 hello.py --help
python3 project.py --help
python3 project.py init --help

See Also

History