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 でパッケージを更新するための使用方法について説明しました。