こんにちは。
pipで一括アップデートを行う確認付きシェルスクリプトを作りました1。
一括アップデート実行
確認無しで実行(基本)
基本となる確認無しの「一括アップデート実行」は、ワンライナーでは、
$ python3 -m pip list --format=columns --outdated | awk 'NR>=3 {print $1}' | xargs python3 -m pip install --upgrade
確認付き
一括アップデートの確認( [upgrade all? (y/n)]
)を付け、シェルスクリプトに仕立てました。
pip_upgrade_all.sh
#!/bin/sh
PIP="python3 -m pip"
OUTDATED=$(${PIP} list --format=columns --outdated | awk 'NR>=3 {print $1}')
[ -z "${OUTDATED}" ] && exit $?
echo "${OUTDATED}"
echo "[upgrade all? (y/n)]"
read -r KEYINPUT
[ "${KEYINPUT}" = "y" ] && echo "${OUTDATED}" | xargs ${PIP} install --upgrade
exit $?
依存関係確認
最新バージョンへアップデートする前には、依存関係の確認が本当は必要です。
pipdeptree コマンド利用で確認
下記例は osmnx 1.2.3 がインストールされている状態ですが、これが必要とする Shapely のバージョンは 2.0 より低いものです。したがってこの場合 Shapely を上記方法で率直に Latest へアップデートすることは良くないです(実行してしまうと警告が出ます)。
$ python3 -m pip install pipdeptree
$ pipdeptree -r -p Shapely | grep "<"
- osmnx==1.2.3 [requires: Shapely>=1.8,<2.0]
$
$ python3 -m pip list --format=columns --outdated
Package Version Latest Type
------------------ ----------- ------ -----
Shapely 1.8.5.post1 2.0.0 wheel
homebrew 由来の Python 環境下
homebrew 由来の Python で、package もインストールされる場合があります(下記例)。この場合も gdal を上記方法で率直に Latest へアップデートしない方が良さそうです(競合のおそれ?)。
$ ls -d /usr/local/Cellar/gdal/*
/usr/local/Cellar/gdal/3.6.0
$
$ python3 -m pip list --format=columns --outdated
Package Version Latest Type
------------------ ----------- ------ -----
GDAL 3.6.0 3.6.1 sdist
-
参考:「pipで一括アップデート」 ↩