Python pip-review で全てのパッケージを更新する

Pythonのパッケージのアップデートは面倒です。たくさんのパッケージがあり、すべての最新バージョンを把握するのは難しいですし、何をアップデートするか決めたとしても、それぞれを手動でアップデートしなければなりません。

この問題に対処するために、pip-review が作られました。これを使えば、利用可能な全てのPyPiのアップデートを簡単なコマンドでスムーズに管理することができます。

元々は pip-tools パッケージの一部でしたが、現在は pip のスタンドアロンなラッパーとして生きています。このチュートリアルでは、pip-review を使ってすべてのパッケージをアップデートする方法を説明します。

pip-reviewをインストールします。

pip-reviewは、仮想環境にインストールすることもできますし、システム全体にインストールすることもできます。当然ながら、pip-reviewのインストールはpip` 経由で行われます。

$ pip install pip-review
...
Successfully installed pip-review-1.1.0


pip-reviewのヘルプページ

これらのコマンドを忘れてしまった場合、または単にコマンドのオプションの概要を知りたい場合。

$ pip-review -h
usage: pip-review [-h] [--verbose] [--raw] [--interactive] [--auto]


Keeps your Python packages fresh. Looking for a new maintainer! See https://github.com/jgonggrijp/pip-review/issues/76


optional arguments:
  -h, --help         show this help message and exit
  --verbose, -v      Show more output
  --raw, -r          Print raw lines (suitable for passing to pip install)
  --interactive, -i  Ask interactively to install updates
  --auto, -a         Automatically install every update found


Unrecognised arguments will be forwarded to pip list --outdated and pip install, so you can pass things such as --user, --pre and --timeout and they will do what you expect. See pip list -h and pip install -h
for a full overview of the options.


pip-reviewで全てのパッケージのバージョンを確認する。

時には、長いアップデートリストにコミットする前に、アップデートがあるかどうかだけ確認したいことがあります。すべてのパッケージのバージョンをチェックするには、次のように実行します。

$ pip-review
scikit-learn==0.23.2 is available (you have 0.23.1)
scipy==1.5.4 is available (you have 1.4.1)
seaborn==0.11.0 is available (you have 0.10.1)
...


これにより、利用可能なすべてのパッケージのアップデートをリストアップしたレポートが得られます。基本的に、これは pip list - outdated を呼び出します。これは、どのパッケージをアップデートするか(もしあれば)を自分で決められるという利点があります。

pip-review で全パッケージをアップデート

パッケージの更新を行うかどうかが決まったら、pip-review を使ってすべてのパッケージを自動的に更新することができます。

$ pip-review --auto
Collecting beautifulsoup4==4.9.3
Downloading beautifulsoup4-4.9.3-py3-none-any.whl (115 kB)
...


このコマンドを実行するだけで、準備は完了です。とても簡単です。

pip-review で全てのパッケージを対話的に更新する。

特定のパッケージのアップデートをしたくない場合、 --auto アップデーターを実行する必要はありません。このプロセスを --interactive として起動すると、個々のパッケージごとに更新するかどうかを選択することができます。

$ pip-review --interactive
matplotlib==3.3.3 is available (you have 3.1.3)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit N
numpy==1.19.4 is available (you have 1.18.1)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit Y
pandas==1.1.5 is available (you have 1.0.3)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit N
...


それぞれのパッケージに対して、”Yes”、”No”、”All”、”Quit “の4つのオプションがあります。

Yes” を選択すると、そのパッケージを “to-be-updated-list” に追加することを意味します。最後に、このリストにあるすべてのパッケージが更新されます。

No “を選択した場合、そのパッケージは更新されません。All” を選択すると、これから進むすべてのパッケージがリストに追加されます。最後に、”Quit” を選択すると、pip-review は残りのパッケージをすべてスキップして、”Yes” を選択したパッケージのみを更新することになります。

pip-review による特定のパッケージのアップデートの防止

状況によっては、pip-review --autoを実行したときに、特定のパッケージが自動的に更新されないようにしたい場合があります。これはおそらく、よくある問題である依存性の問題を回避するためでしょう。

このような場合、更新させたくない特定のパッケージを固定したいことでしょう。これは制約ファイルによって行うことができます。制約ファイルとは、要件のどのバージョンをインストールするかだけを制御する要件ファイルで、インストールするかどうかを制御するものではありません。

その構文と内容は、要件ファイルのそれと同じです。ただし、1 つだけ重要な違いがあります。

制約ファイルにパッケージが含まれていても、パッケージのインストールは開始されません。

制約ファイル(constraints.txt)を作成しましょう。

$ export PIP_CONSTRAINT="/home/username/constraints.txt


そして、その中に、今度は、挿入します。

matplotlib==3.1.3
pandas==1.0.3


結論

pipを使ってパッケージを更新するのは、面倒で時間のかかる作業です。そして、コンピュータサイエンスの世界で予想されるように、これを自動化するツールが生まれました。この記事では、pip-review` ユーティリティのインストール方法と、Python でパッケージを更新するための使用方法について説明しました。

タイトルとURLをコピーしました