はじめに
PipでPython libraryを管理する場合、pip list -o
などでUpgradeされたPackageを確認すると、思いのほか大量にある場合がある。一つ一つ手動でUpgradeしても良いが、大量にあると少々面倒だ。
そこで、一括でUpgradeできるOne-linerを書いてみた。
One-liner
基本形
基本形は以下の通りとなる。
pip install -U `pip list -o | tail -\`expr \\\`pip list -o | wc -l\\\` - 2\` | awk '{print $1}' | sort -u`
仕様・解説
- UpgradeされるPackage数を取得
pip list -o | wc -l
で取得された行数から、Header行の2
を引いている。 -
pip list -o
の出力からHeaderを除いたPackage一覧を出力し、Package名が格納されている1列目を抜き出す。 - 上記で作成したPackage一覧に対してUpgradeを実施。
一部のPackageを除外
UpgradeしたくないPackageや、PipでUpgradeしようとしても失敗するPackageはgrep -v
を用いて除外する。
pip install -U `pip list -o | tail -\`expr \\\`pip list -o | wc -l\\\` - 2\` | awk '{print $1}' | sort -u | grep -v "PyGObject\|pycairo"`
上記の例ではPyGObject
とpycairo
を除外している。
特定バージョンのPythonや、InterpreterのPackageに対して実行
1台のマシンに複数バージョンのPythonがインストールされている場合や、Pypy
などの別のPython実行環境がインストールされている場合、以下のようにして該当のPython実行環境に対してUpgradeを実施できる。
以下の例はPypy3.9
環境に対して実行した例。
pypy3.9 -m pip install -U `pypy3.9 -m pip list -o | tail -\`expr \\\`pypy3.9 -m pip list -o | wc -l\\\` - 3\` | awk '{print $1}' | sort -u`
これで、瞬時にPython packageの一括Upgradeを実施できるようになった。
誰かのお役に立てれば幸いである。
では、楽しいPython lifeを!