とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

Pythonモジュール管理の新たな道具:pipxを使ってみた

Pythonには色々な便利なモジュールが存在します。中には単体で動くCLIツールなどもあったりします。

pipxは、Pythonで書かれたエンドユーザーアプリケーションのインストールと実行に役立つツールです。 macOSのbrew、JavaScriptのnpx、Linuxのaptやdnfに似たツールのようなものですね。

pipはPythonモジュールとCLIツールのインストールができるツールですが、pipの代わりにpipxを使えば、次のような利点があるので良い感じです。

  • pip listにインストールしたモジュールが表示されない
  • インストールしないで実行(ワンタイム実行)もサポート
  • 色々なPythonバージョンベースで実行
  • Git上のバイナリーを実行もサポート

pipxはコマンドラインからアプリケーションとして直接実行できるPythonパッケージのインストールと管理に重点を置いているという違いがあります。 早速ダウンロードして使ってみましょう。

インストール

pipxは色々なOSをサポートしています。 次のリストにあるOSであれば、各パッケージ管理用のコマンドを使ってインストールできます。

例えば、次のような感じでインストールできます(インストール方法はOSごとに異なる)。

$ sudo dnf install pipx
メタデータの期限切れの最終確認: 0:04:13 前の 2024年05月29日 19時09分09秒 に実施しました。
依存関係が解決しました。
===================================================================================================================================
 パッケージ                            アーキテクチャー         バージョン                       リポジトリー                サイズ
===================================================================================================================================
インストール:
 pipx                                  noarch                   1.2.1-1.el9                      epel                        106 k
依存関係のインストール:
 python3-argcomplete                   noarch                   1.12.0-5.el9                     appstream                    67 k
 python3-click                         noarch                   8.0.3-1.el9                      epel                        174 k
 python3-packaging                     noarch                   20.9-5.el9                       appstream                    77 k
 python3-pyparsing                     noarch                   2.4.7-9.el9                      baseos                      150 k
 python3-userpath                      noarch                   1.9.2-1.el9                      epel                         29 k

トランザクションの概要
===================================================================================================================================
インストール  6 パッケージ

ダウンロードサイズの合計: 604 k
インストール後のサイズ: 2.2 M
これでよろしいですか? [y/N]: y

これでインストールできました。

次のように実行すると、パスを追加してくれます。自動的にユーザーディレクトリーの.local/binにインストールし、かつPython仮想環境も組み合わせた上でバイナリーを実行してくれるので、システムのPython環境が汚されることなく利用できます。

$ pipx ensurepath
/home/ytooyama/.local/bin is already in PATH.

⚠️  All pipx binary directories have been added to PATH. If you are sure you want to proceed, try again with the '--force' flag.

Otherwise pipx is ready to go! ✨ 🌟 ✨

インストールが終わったので、早速使ってみます。

pipxでCLIツールをインストールして使う

今回はインターネット接続回線のテストでよく使う、speedtest-cliをインストールしてみます。 パッケージのインストールのサブコマンドはinstallです。他のインストーラーと使い勝手は一緒ですね。

$ pipx list
nothing has been installed with pipx 😴

$ pipx install speedtest-cli
  installed package speedtest-cli 2.1.3, installed using Python 3.9.18
  These apps are now globally available
    - speedtest
    - speedtest-cli
done! ✨ 🌟 ✨

pipx listでインストールしたパッケージを表示できます。これによると、venvによるPython仮想環境も組み合わせて使っているようですね。

$ pipx list
venvs are in /home/ytooyama/.local/pipx/venvs
apps are exposed on your $PATH at /home/ytooyama/.local/bin
   package speedtest-cli 2.1.3, installed using Python 3.9.18
    - speedtest
    - speedtest-cli

インストール後はパスが通っているので、コマンドを使えばCLIが使えます。

$ speedtest-cli --version
speedtest-cli 2.1.3
Python 3.9.18 (main, Jan 24 2024, 00:00:00) [GCC 11.4.1 20231218 (Red Hat 11.4.1-3)]

pipxでCLIツールをワンタイム実行する

pipxコマンドにrunオプションをつけて実行すると、わざわざインストールしておかなくても自動的に良きに計らってくれます。 インストール済みであればそれを使ってコマンドを実行しますし、未インストールであればインストールせずにCLIを実行できます。

たまにしか実行しないようなものはpipx runを使えば良いみたいです。

$ pipx run cowsay -t hello!
  ______
| hello! |
  ======
      \
       \
         ^__^
         (oo)\_______
         (__)\       )\/\
             ||----w |
             ||     ||

//一覧にはcowsayはない
$ pipx list
venvs are in /home/ytooyama/.local/pipx/venvs
apps are exposed on your $PATH at /home/ytooyama/.local/bin
   package speedtest-cli 2.1.3, installed using Python 3.9.18
    - speedtest
    - speedtest-cli

今回は基本的な使い方を用いてpipxを利用しましたが、次のサイトを見ると色々な方法でPythonのCLIツールを実行できるようです。

pipでインストールできるCLIツールは便利なものも多いので、今後はpipの代わりにpipxを使おうと思います。 例えばAnsibleとかもpipxを使えば便利まもしれません。実際公式のドキュメントにpipxでAnsibleをインストール方法も書かれています。

元々この記事を書いた当初はLinuxの環境にpipxでツールをインストールしていたのですが、普段使いのmacOS環境にもpipxをインストールしました。 まずはcowsayでも入れておこうと思います。