uvxで誰でも使えるPython自作ツールを手軽に公開する方法
uvxとは?
uvxは、Pythonのパッケージマネージャーuvの一部で、PyPIに公開せずともGitHubリポジトリから直接Pythonツールを実行できる便利な機能です。本記事では、誰でも簡単にuvxで動作するツールを作成・公開する方法を解説します。
本記事の前提として、uvの基本を理解していて、セットアップが完了している必要があるため、uvを全く知らない方や、セットアップしていない方は、以下記事を参照してください。
uvxはuv tool run
のエイリアスです。uv tool
はPython製のCLIツールを簡単にグローバルにインストールできる機能です。uvx
を実行することでPyPIに登録されている多くの(全てではありません)CLIツールを手軽に動かすことができます。
PyPIに登録されたソフトをuvxで動かす方法
例えばPythonのLinter・FormatterであるRuffもuvxで使えます。uvさえインストールされていれば、以下コマンドでLintチェックとフォーマットができます。
$ uvx ruff check
$ uvx ruff format
Ruffについて詳しくは以下記事参照ください。
GitHubのリポジトリ上のソフトをuvxで動かす方法
uvxで手軽に動かすためにはPyPIに登録しないと駄目だと思っていたのですが、GitHubリポジトリを指定しても動かすことができることをつい最近知りました。以下みたいに--from
オプションを使います。
$ uvx --from git+https://github.com/user/repo tool-name
これを使えば、GitHubで公開した自作ツールを、多くの人に手軽に使ってもらうことができます。
今回は試しにuvxで動くツールを格納したサンプルリポジトリを作成しました。AIに適当に作ってもらったもので、実用性は皆無です(あくまでuvxをテストするためのリポジトリです)。
基本的には以下3点を満たしていればuvxで動きます。
- ライブラリとしてパッケージ化されている(
pyproject.toml
orsetup.py
がある) - モジュールかCLIエントリポイントが用意されている
- 必要なライブラリの依存関係が宣言されている
ライブラリに関して全然分からない場合は、以下記事も参考にしてください
上記ソフトのuvxでの動かし方は、モジュールとして動かす場合は以下です。
$ uvx --from git+https://github.com/karaage0703/uvx-tools python -m hello_uvx.cli
実行すると以下のように表示されます。
╔═══════════════════════════════════╗
║ Hello, World! ║
║ Time: 2025-10-01 23:12:43 ║
║ Running via uvx ✨ ║
╚═══════════════════════════════════╝
console_scripts
エントリポイントを使うともっとシンプルに動かせます。pyproject.toml
で以下のように定義します。
[project.scripts]
hello-uvx = "hello_uvx.cli:main"
pysay = "pysay.cli:main"
file-stats = "file_stats.cli:main"
これで、以下のように簡潔に動かせます(表示結果は同じなので省略します)。
$ uvx --from git+https://github.com/karaage0703/uvx-tools hello-uvx
uv tool install でインストールする
頻繁に使うツールは uv tool install
でインストールすると便利です。グローバルにインストールするにはconsole_scripts
エントリポイントが必要となります。
以下コマンドでインストールできます。
$ uv tool install git+https://github.com/karaage0703/uvx-tools
インストールされたら以下実行してみましょう。
$ pysay 'Hello'
以下のようにウシさんがHelloと言ってくれます。
-------
< Hello >
-------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
インストール済みツールの管理:
# インストール済みツール一覧
uv tool list
# ツールをアップデート
uv tool upgrade uvx-tools
# 全ツールをアップデート
uv tool upgrade --all
# ツールをアンインストール
uv tool uninstall uvx-tools
自作MCPサーバでuvxを使う場合
自作のMCPサーバ、例えばKaggleの情報を取得するMCPサーバの場合、一度ローカルにMCPサーバをダウンロードして、以下のように絶対パスを使ってMCPサーバの場所を指定をしていました。ただ、これだと環境依存があるので引っかかりやすいのと、なによりコピペできないので面倒ですね。
{
"mcpServers": {
"kaggle-mcp-server": {
"command": "uv",
"args": [
"run",
"--directory",
"</path/to/kaggle-mcp-server>",
"-m",
"kaggle_mcp_server"
]
}
}
}
ここで、uvxで--from
を使えば絶対パスを使わずに、以下のようにGitHubのリポジトリを指定する形で書けます。
{
"mcpServers": {
"kaggle-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/karaage0703/kaggle-mcp-server",
"python",
"-m",
"kaggle_mcp_server"
]
}
}
}
MCPサーバを手軽に設定できるので、これで心置きなくMCPサーバをいくらでも作って公開できますね。
まとめ
uvxを使って、PyPIに公開せずに簡単にPythonツールを共有・実行する方法を紹介しました。
ちょっとした便利ツールやMCPサーバを公開するときに便利だと思いますので、よかったら活用してみてください。
MCPサーバを自作したいという人はPythonではじめるMCP開発入門
もどうぞ!(著者としてのダイレクトマーケティングです!)
参考リンク
関連記事
Discussion