時たま利用する、単体のPythonスクリプトがいくつかある。
利用する頻度としては微妙なラインで、わざわざパッケージ化するほどではないが、誰かに共有したり、複数の端末でインストールしたい場合には、1発のコマンドでインストールできると便利だ。
uv
のuv tool install
コマンドを使うと、簡単に隔離された環境にPythonパッケージをCLIとしてインストールできる。だが、現状は単一のPythonスクリプトをインストールすることはできない。少なくとも、1つのPythonスクリプトに加えて、pyproject.toml
が必要になる。
単一のPythonスクリプトをインストール可能にするfeature requestがuv
のレポジトリで作成されているが、まだ実装されていないのが現状だ。
copier template
そこでcopierを使って、PythonスクリプトをCLIツールとしてuv tool install
でインストールするためのミニマムなファイルを生成するテンプレートを作成した。
ファイルを生成するには、uvをインストールした環境で、以下のコマンドを実行する:
uvx copier copy gh:kj-9/uv-tool-min-copier your-tool-dir
プロンプトでいくつかの質問に回答を求められるので、生成するCLIツール名など適宜入力する。
途中で"Do you want to use Click for command line interface?"
という質問が表示される。y
を入力すると、Clickを使ったCLIツールのスターターコードがスクリプトに追加される。
入力が完了すると以下の3つのファイルが生成される:
main.py
pyproject.toml
.gitignore
main.py
はCLIツールのスクリプト本体。こちらを編集してツールを作成する。
pyproject.toml
はuv toolとしてインストールするため、ミニマムな内容のみを記述した設定ファイル。
.gitignore
はインストールには不要だが、プロジェクトをGitで管理する場合のために生成している。
インストール
生成したプロジェクトディレクトリを指定して、uvでインストールする:
uv tool install ./your-tool-dir -e
-e
オプションは、編集モードでインストールするためのオプション。これにより、インストールされたツールのソースコードを編集することができる。
gitリポジトリとしてgithubに公開した場合、以下のコマンドでインストールできる:
uv tool install git+https://github.com/{github-username}/{repo-name}
Gistとして公開する場合は:
cd your-tool-dir
gh gist create main.py pyproject.toml --description "ツールの説明"
Gist自体もGitレポジトリなので、GistのURLを指定すればインストールできる:
uv tool install git+https://gist.github.com/{github-username}/{gist-id}