Skip to main content

wpycli

wpycli는 Python 3.12+ 환경을 위한 Cobra 스타일 CLI 툴킷입니다. Go의 cobra에서 영감을 받아, 명확한 구조와 강력한 설정을 지향하면서도 Python다운 간결함을 유지합니다.

주요 기능

  • 관리 도구: wpycli init, add 명령어를 통한 프로젝트 구조 자동 생성 및 관리
  • 명령 트리: 계층형 명령 트리와 alias 지원
  • 플래그 시스템: local 플래그와 persistent 플래그 지원
  • 자동화된 도움말: --help, help, --version 자동 처리
  • 유연한 훅: 전처리와 후처리를 위한 훅 기반 실행 흐름
  • 런타임 부트스트랩: PyPI 패키지 wpyconfwpylog 기반 계층형 설정 및 로깅 자동 구성
  • 경량 터미널: rich 없이도 색상, 패널, 구조화된 help를 제공하는 내장 렌더러

설치 및 환경 구성

uv를 사용하여 의존성을 설치하고 개발 환경을 구성하는 것을 권장합니다.

# 프로젝트 다운로드 및 의존성 설치
git clone https://github.com/wkqco33/wpycli.git
cd wpycli
uv sync

# 또는 라이브러리로 설치
uv pip install .

프로젝트 관리 (CLI 도구)

wpycli 관리 도구 또한 uv run을 통해 즉시 실행할 수 있습니다.

1. 프로젝트 초기화

새로운 CLI 프로젝트를 시작합니다.

mkdir my-project
cd my-project
uv run --project .. wpycli init my-project

init은 현재 디렉터리에 프로젝트 파일을 생성하므로 비어 있는 디렉터리에서 실행합니다.

  • main.py: 엔트리포인트 파일 생성
  • my_project/commands/root.py: 루트 커맨드 정의 파일 생성

2. 커맨드 추가

프로젝트에 새로운 서브 커맨드를 추가합니다.

cd my-project
uv run wpycli add serve
  • my_project/commands/serve.py: 커맨드 로직 파일 생성
  • root.py에 해당 커맨드가 자동으로 임포트 및 등록됩니다.

예제 실행

uv run을 사용하면 별도의 가상환경 활성화 없이도 안전하게 예제를 실행할 수 있습니다.

uv run python main.py --help
uv run python main.py serve --config ./config.yaml
uv run python main.py --log-level DEBUG config

프로그래밍 모델

from wpycli import Command, ConfigSettings, LoggingSettings

def build_cli() -> Command:
    root = Command(
        use="demo",
        short="Demo CLI",
        version="0.2.0",
    )

    root.add_persistent_string_flag("config", help="설정 파일 경로")
    
    root.configure_runtime(
        config=ConfigSettings(
            defaults={"server": {"port": 8080}},
            env_prefix="DEMO",
            file_flag="config",
        ),
        logging=LoggingSettings(logger_name="demo"),
    )

    def _run_echo(ctx):
        print(f"Echo: {' '.join(ctx.args)}")

    echo = Command(use="echo", short="출력", run=_run_echo)
    root.add_command(echo)
    return root

if __name__ == "__main__":
    build_cli().execute()

개발 및 테스트

# 의존성 동기화
uv sync

# 테스트 실행
uv run python -m unittest discover -s tests

라이선스

이 프로젝트는 MIT License로 배포됩니다.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wpycli-0.2.0.tar.gz (33.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wpycli-0.2.0-py3-none-any.whl (28.6 kB view details)

Uploaded Python 3

File details

Details for the file wpycli-0.2.0.tar.gz.

File metadata

  • Download URL: wpycli-0.2.0.tar.gz
  • Upload date:
  • Size: 33.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for wpycli-0.2.0.tar.gz
Algorithm Hash digest
SHA256 fd4a28b6dd03eafc2dc7cbeee996f8b080c24e599d9c40ca57b71b3db255cf49
MD5 aab5977d326b62927501d731077f9f21
BLAKE2b-256 0ac9be3314685daa6e887996c025631cf7eb183e276642c2be620863875e1c36

See more details on using hashes here.

File details

Details for the file wpycli-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: wpycli-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 28.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for wpycli-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 183359bc2d60403291af584cdca4a8c030ca273bf1e7677e54a0fb0ab8421ac2
MD5 481a53f9b64e2b158d275827c431edf6
BLAKE2b-256 a65bd1a95fc55fad50beda36192122b35e62eb2ae1b377797aca39d1041beed4

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.1

2 files

0.3.0

2 files

This release

0.2.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page