pipxの紹介

Published at: 2019-08-26 / Updated at: 2019-08-25

Python製のCLIツール(アプリケーション), 書く方はサクッとかけて使う方もpipでインストールするだけで簡単に使えるのでとても便利ですね.
しかし, グローバル環境にツールやライブラリをガチャガチャ入れたくなくてvenvpipenvなどのツールを使って仮想環境を作っている人も多いことでしょう.
アプリケーションも仮想環境で管理したい, けれどグローバルに使いたい, そのような気持ちは欲張りすぎなのでしょうか.
これから紹介するpipxというツールを使うことでこういった要望が叶えられるようになります.

pipxとは

pipx

 Documentation: https://pipxproject.github.io/pipx/ Source Code: https://github.com/pipxproject/pipx For comparison to other tools including pipsi, see Comparison to Other Tools. python3 -m pip install --user pipx python3 -m pipx ensurepath Upgrade pipx with python3 -m pip install -U pipx. Shell completions are available by following the instructions printed with this command: pipx completions For more details, see the installation instructions.

pipxは仮想環境にPython製のアプリケーションをインストールし, グローバルに実行できるようにするツールです.
JavaScriptに馴染みのある人にはnpxのようなものだと思ってもらってよいと思います.

pipxはアプリケーションのみを管理するツールであり, numpyなどのライブラリはpipxの管轄外であるということに注意してください.

インストール方法

pip install --user pipx

使い方

pipx install

Python製のドキュメント作成ツール, Sphinxを例とします.

Sphinxのドキュメントによると, 次のようにインストールするよう書かれています.

pip install -U sphinx

これをpipxでインストールすると次のようになります.

pipx install sphinx

このとき, Sphinx関連の実行ファイルは$HOME/.local/binに格納されます.
これらは作業ディレクトリでvenvを使った仮想環境を立てていても使用することができます.

pipx inject

多くの人はSphinxを使うとき, デフォルトのテーマに飽き足らず他のテーマを使いたくなるでしょう.
ここではsphinx_rtd_themeを使うとします.

pipxはCLIツールをインストールするものなので, 拡張ライブラリであるsphinx_rtd_themeを直接インストールすることはできません.
そこで, sphinxの仮想環境にライブラリを追加するという手段をとります.

pipx inject sphinx sphinx_rtd_theme

injectは既に存在する仮想環境にライブラリを追加するサブコマンドです.
pipxはツール名を仮想環境の名前とするので, 上記コマンドはsphinxという仮想環境にsphinx_rtd_themeを追加するという操作を行っています.

実際にconf.pyを編集してビルドすると問題なく使用できます. 素晴らしいですね.

pipx uninstall

Sphinxの環境が気に入らなければ次のコマンドで全てを消し去ることができます.

pipx uninstall sphinx

依存するモジュールごと綺麗さっぱりなくなるのであとぐされがなくてよいですね.

others

インストールすることなく(一時的な仮想環境上で)実行できるpipx runや仮想環境のリストを表示するpipx listなどといったサブコマンドもあります.

詳しくはドキュメントexamplesを参照してみてください.

まとめと所感

Python製のアプリケーションをインストールする際にpipxを使うことでモジュールの競合を防ぎつつ仮想環境内でも使えるようになります.

Pythonのパッケージ管理ツールがいろいろ出てきていますが, 公式には適切に利用して欲しいとしか発表されていません.
https://packaging.python.org/tutorials/managing-dependencies/
https://packaging.python.org/tutorials/packaging-projects/
ここではpipenv, poetry, flitなどがあげられています.

私は基本的に仮想環境を作る目的でpipenvを使っていますが, パッケージの公開を考えている場合, setuptoolsまで置き換えてしまうpoetryflitを使ってもいいかもしれません.
ただpoetryを推す人は狂信してる人が多い印象があるのであまり近寄りたくはないですが…
売りのひとつであるPEPで規定されたpyproject.tomlを使ってる点も中身が全てpoetryの名前空間使ってるせいで結局Pipfileと変わらないように思えます.
flitも同じようなツールですが驚くほど使用者を見かけない気がしています.

ともかくライブラリとして利用するモジュールは上記3つのいずれかを使ってインストールすると良いでしょう.
それに対してアプリケーションとして利用するモジュールはpipxを使ってインストールすると幸せになれるでしょう.