はじめに
🙅♂️1 nikkieです
普段Pythonで開発するときはpipのお世話になっていますが、少し前からpipxなるものの存在を耳にしていました。
どんなツールか知ろうと、今回手を動かしています
目次
pipxとは
PyPA(Python Packaging Authority)が開発するツールの1つ
端的に言うと以下のようです
Install and Run Python Applications in Isolated Environments
「Python Applications」の部分が最初は分からなかったのですが、どうやら以下のようです(※今の私の理解を書きます)。
- Pythonを使った開発の中でいろんなパッケージを
pip install
する- 依存するライブラリ(例えば、PyTorch)
- 開発を円滑にするために使うツール(例えば、taskipy2)
- これらのうち、後者のツールにフォーカスしたのがpipx
- Python製のCLIアプリケーションをpipxで環境を分けて管理できる(ということらしい)
pipxのインストール(macOS)
macOSにはHomebrewでインストールできます4。
https://pipx.pypa.io/stable/#on-macos
brew install pipx pipx ensurepath
pipxでBlackをインストール
pipx install
でPython製のCLIアプリケーションをインストールできます。
https://pipx.pypa.io/stable/#walkthrough-installing-a-package-and-its-applications-with-pipx
例えばフォーマッタのBlackなら
pipx install black
これでblack
コマンドが有効になります。
プロジェクトごとに切る仮想環境にインストールしなくてよいのは嬉しいですね!
pipxでpip-toolsをインストール
先日素振りしたpip-toolsをインストールしましょう。
pipx install pip-tools
実はpip-toolsのドキュメントではpipxを使った動作方法も案内されていました。
https://github.com/jazzband/pip-tools/tree/7.3.0?tab=readme-ov-file#example-usage-for-pip-compile
pip-toolsの使い方は過去の記事があります。
pip-compile
pip-sync
このうちpip-sync
にポイントがありました。
--python-executable引数を指定する必要があります!
pip-sync --python-executable $PWD/venv/bin/python
仮想環境(venvディレクトリ)を切っていて、仮想環境の中にrequirements.txtに沿った依存をインストールしたいという状況です。
- pip-syncは(pipxが管理しているので)、requirements.txtの内容をインストールしたい仮想環境とは別の環境にあります
- 単に
pip-sync
だとpip-syncがある環境にrequirements.txtの内容がインストールされます。これは望んでいません - そこで
--python-executable
引数でパッケージをインストールしたい環境のPythonを指定しますCustom python executable path if targeting an environment other than current.(
pip-sync --help
より)
この引数は以下で知りました。
まとめると、pipxでインストールしたpip-toolsを使うときは
pip-compile
pip-sync --python-executable path/to/python
です。
pipxは高機能!宿題事項列挙
今回はBlackとpip-toolsを入れました。
% pipx list venvs are in /.../Library/Application Support/pipx/venvs apps are exposed on your $PATH at /.../.local/bin manual pages are exposed at /.../.local/share/man package black 24.1.1, installed using Python 3.12.1 - black - blackd package pip-tools 7.3.0, installed using Python 3.12.1 - pip-compile - pip-sync
pipxはこの2つをそれぞれ別の仮想環境で管理しています。
% ls /.../Library/Application\ Support/pipx/venvs black pip-tools
pipxのツールごとの仮想環境について、injectという機能があるみたいです(宿題その1)。
https://pipx.pypa.io/stable/#inject-a-package
ipythonをインストールしたpipxの仮想環境にmatplotlibをインストールするコマンド例があります
また、この記事ではpipx install
のみを紹介しましたが、pipx run
もあります。
https://pipx.pypa.io/stable/#walkthrough-running-an-application-in-a-temporary-virtual-environment
これはインストールとは趣が違う印象(新概念かも)で、宿題事項その2です。
終わりに
存在だけ聞いていたpipxを触りました。
CLIアプリケーションとして使えるPythonパッケージの管理にフォーカスしています。
Blackなどの開発でお世話になるツール類を、プロジェクトごとの仮想環境に都度インストールしなくて済みそうなのは(特に個人開発で)なかなかよさそうです。
pipx自体は高機能なので、すこーしずつ使える範囲を増やしていきたいですね。