pipで入れたパッケージを一括更新する

python のパッケージをコマンド一行で最新版にアップデートする方法です

コマンド

普段 sudo を使わずに,--user つけてpipを実行している場合

$ pip3 list --format freeze --outdated | while IFS='==' read pkg dummy; do  pip3 install --user --upgrade $pkg ; done

普段 sudo を使ってpipを実行している場合

$ pip3 list --format freeze --outdated | while IFS='==' read pkg dummy; do sudo  pip3 install --upgrade $pkg ; done

これだけです

注意

上記の例ではpip3を使っています.実際にコマンドを実行する際には,使っている環境に合わせて pip-3 とか pip とかに書き換えて使用してください

解説

pip コマンドと bash を組み合わせています

更新が必要なパッケージを pip3 コマンドで調べます

$  pip3 list --format freeze --outdated

例えば以下のような出力が得られます

Mako==1.0.7

これを bash の read コマンドで読み取ります

説明のために読み取った値を表示するだけのコードを書いておきます

$ pip3 list --format freeze --outdated | while   IFS='==' read pkg dummy; do  echo "pkg:[$pkg]   dummy:[$dummy]"; done

変数IFSを使って区切り文字として"=="を指定しています.この場合 read コマンドは,"Make==1.0.7"という入力行にたいして,最初のトークン"Mako"を変数pkgに,残りのトークン"1.0.7"を変数dummyに格納します

これで変数pkg にパッケージ名が入るので,あとは pip3 install --user --upgrade $pkg でパッケージを更新していきます