👔

pipx runでCLI名刺を!!

2024/07/29に公開

npxでCLI名刺を作るのを見て、「Pythonでも同じことができるはず!」と思ったことはありませんか?

そう、pipxを使えば簡単に実現できるんです!

pipxとは?

pipxは、Pythonパッケージを分離された環境にインストールして実行するためのツールです。グローバル環境を汚さずに、CLIアプリケーションを簡単に使用できます。
https://github.com/pypa/pipx

プロフィールカードを作ってみよう

それでは、pipxを使ってオリジナルのプロフィールカードを作成する方法を見ていきましょう。

1. 必要なライブラリ

まず、以下のライブラリを使用します

  • typer: コマンドラインインターフェースの作成
  • rich: ターミナルでの豪華な出力

2. コードを書く

profile_card.py
import typer
from rich import print
from rich.panel import Panel
from rich.align import Align
from rich.console import Console
from rich.text import Text
from rich.live import Live
from rich.style import Style
from time import sleep

app = typer.Typer()

def create_content():
    content = Text()
    content.append("Your Name\n\n", style="bold cyan")
    content.append("    work:  ", style="green")
    content.append("Python Developer\n", style="yellow")
    content.append("    GitHub:   ", style="green")
    content.append("https://github.com/yourusername\n", style="blue underline")
    content.append("    Blog:     ", style="green")
    content.append("https://yourblog.com\n", style="blue underline")
    content.append("    Contact:  ", style="green")
    content.append("your.email@example.com\n\n", style="magenta")
    content.append("    Card:     ", style="green")
    content.append("pipx run your-package-name", style="red")
    return content

@app.command()
def main():
    full_content = create_content()
    lines = full_content.split("\n")
    console = Console()
    with Live(console=console, refresh_per_second=20) as live:
        content = Text()
        for line in lines:
            for char in line:
                content.append(char)
                panel = Panel(
                    Align.center(content, vertical="middle"),
                    border_style="white",
                    expand=False,
                )
                live.update(panel)
                sleep(0.02)
            content.append("\n")
            live.update(panel)
            sleep(0.1)
        for i in range(1, 50):
            panel.border_style = Style(color=f"color({i*5})")
            live.update(panel)
            sleep(0.1)

if __name__ == "__main__":
    app()

3. パッケージ化

pyproject.tomlファイルに、以下の内容を記述します

pyproject.toml
[tool.poetry]
name = "your-profile-card"
version = "0.1.0"
description = "A CLI profile card"
authors = ["Your Name <your.email@example.com>"]

[tool.poetry.dependencies]
python = "^3.7"
typer = "^0.9.0"
rich = "^13.0.0"

[tool.poetry.scripts]
profile-card = "your_package_name.profile_card:app"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

4. ビルドとデプロイ

  1. Poetry を使ってパッケージをビルドします:
poetry build
  1. PyPI にアップロードします:
poetry publish

5. 使用方法

これで、誰でも以下のコマンドであなたのプロフィールカードを表示できます

pipx run your-profile-card

まとめ

pipxを使えば、Pythonistasも簡単にCLIプロフィールカードを作成し、共有できます。クールなツールを作りましょう!

Discussion