はじめに
えびふりゃー・みそかつ・小倉トースト・みゃ〜 nikkieです
inline script metadata(PEP 723)により、Pythonスクリプトについては開発者が仮想環境を管理しなくてもよくなっています1🙌
さらにこのたびuvx
によってPython製CLIツールも開発者が仮想環境を管理しなくてよい世界になっていることに気づきました!
目次
これまでの私
仮想環境にドキュメンテーションツール Sphinxや使いたいSphinx拡張をインストールしていました。
$ python -m venv .venv --upgrade-deps $ .venv/bin/python -m pip install Sphinx sphinx-new-tab-link
uvx
によって、この仮想環境構築も開発者がやらなくてよくなっていると体感しました。
ツールにお任せできます!
uvx
--from
でパッケージを指定
uvx
はuvx <コマンド>
という書式です。
uvx ruff format
でuvが管理する仮想環境にRuffをインストールし、ruff format
を実行します2。
パッケージ名とコマンドが異なる場合もあります。
ドキュメントの例はhttpieパッケージのhttp
コマンド
https://docs.astral.sh/uv/guides/tools/#commands-with-different-package-names
このときはuvx --from httpie http
と--from
で指定します。
uvx ruff format
はuvx --from ruff ruff format
という理解です
Sphinxの場合ですが、sphinx-quickstart
コマンド3は--from
を使って動かせます。
uvx --from Sphinx sphinx-quickstart \ -q \ -p 2023_slides \ -a nikkie \ -v '' \ -l ja \ --sep \ --no-batchfile \ --no-makefile \ --ext-githubpages \ --extensions sphinx_new_tab_link \ --extensions sphinx_design
(source
ディレクトリとbuild
ディレクトリができます)
--with
で一緒に使うパッケージを指定
Sphinxと合わせて使いたい拡張は--with
で指定します。
https://docs.astral.sh/uv/guides/tools/#commands-with-plugins
これができるのはとてもありがたいですね
uvx --from Sphinx \ --with sphinx-new-tab-link \ --with sphinx-design \ sphinx-build -M html source build
HTMLページはbuild/htmlにあります。
コマンドは長くなりますが、Makefile
などに書いておけば気にならないかなと考えています4。
むしろ、uvさえ入っていれば、他の開発者の手元でも動くことが期待される点を私は高く評価しています(開発者が仮想環境を触らなくてよいので)
pipxの場合
--spec
uvx --from
と同じ動きはできますね。
ドキュメント「Package with multiple apps, or the app name doesn't match the package name」
pipx run --spec Sphinx sphinx-quickstart \ -q \ -p 2023_slides \ -a nikkie \ -v '' \ -l ja \ --sep \ --no-batchfile \ --no-makefile \ --ext-githubpages \ --extensions sphinx_new_tab_link \ --extensions sphinx_design
(source
ディレクトリとbuild
ディレクトリができます)
一方uvx --with
と同様の機能は、pipxでは未サポートのように思われました(めちゃ便利だと思うので、プルリクチャンス!)
https://pipx.pypa.io/stable/docs/#pipx-run
終わりに
uvx
の--from
や--with
により、Sphinxやそれらの拡張を仮想環境に開発者がインストールする一手間が完全に不要になっていることに気づきました。
inline script metadataサポート、そしてuvxと、開発者が仮想環境を触る必要性をuvが奪っていっているのがなかなかよいアプローチではないかと思います。
一方、私は仮想環境を理解しているので歓迎しているのですが、uvから入った方に仮想環境をどう伝えていくかは難しいかもとも思います(仮想環境を理解していないとuvにロックインされちゃうかな)
uvx run
はpipx run
相当5で、開発者が仮想環境管理から解放され常に最新のパッケージを利用できると私は考えているので、uvx
の--from
や--with
が可能にする世界を両手を上げて歓迎しています。
いよいよuvx run
のソースコードに潜って、思い違いをしていないか確認するときが来たように思われます。
ヤバい、しびれる
— nikkie / にっきー (@ftnext) 2024年11月15日
uvx --from sphinx sphinx-quickstart
uvx --from sphinx --with sphinx-new-tab-link sphinx-build
CLIで使えるPythonライブラリは"仮想環境構築不要"な世界になってる!!(uvが代わりにやってくれる)https://t.co/aWvyxXeXx8
pipxでもできるかもですが未確認。uvxすごい
P.S. One more thing...
このエントリで1日1エントリは730日連続となりました。
2周年(365 * 2)、うおおおおおお!!🎉
はじまりのエントリと同じSphinxネタだよ...