はじめに
pipを使用してパッケージをアップデートする。
Linuxのコマンドはよく見るけど、Windows版はなかなか見なかったので拙いコマンドだけど記事にしました。
Linuxコマンド
pip list -o --format freeze | sed 's/=.*//' | xargs python -m pip install -U
Windowsコマンド
pip list -o --format freeze | % { $_ -replace "=.*", "" } | % { python -m pip install -U &_ }
以下はコマンドの説明をして終了です
Linuxコマンドの説明
sed
- 置換を行ってくれるコマンド
-
s/置換前の対象/置換後の対象/
を意味する - 今回の場合は、
=.*
を空白に変換するということ
xargs
-
引数を標準入力から与えるもの
-
なんかのコマンド1 | xargs なんかのコマンド2
って感じで使う -
なんかのコマンド1から得られる値を、なんかのコマンド2の引数として使えるよって意味
-
正直良く分かってないけど、以下のような感じ
# 標準入力に値する出力内容 実質的な動作内容 コマンド pip list -o --format freeze (縦線*) sed 's/=.*//'
xagrs python -m pip install -U
上のコマンドを使用したときの出力例 pip
setuptoolspython -m pip install -U pip
python -m pip install -U setuptools
*縦線=「|」(バーティカルバー)のことです。markdownのテーブル機能でバーティカルバーを使用するため、エスケープ出来ませんでした
Windowsコマンド説明
%{}
-
for each
を意味する
$_
- パイプラインに渡されたオブジェクトを表す変数
- ざっくり捉えると、出力された内容を受け取ってるよくらいでいいよ
-
今回だと、以下のようになってます
$_ = pip list -o --format freeze $_ = %{ $_ -replace "=.*", "" } % { python -m pip install -U &_ }
-
-replace
- 置換を行ってくれるコマンド
-
-replace 置換前の対象, 置換後の対象
を意味する
最後に
もっと楽にできる方法があったら教えて下さい。
Linuxコマンドも、Powershellコマンドも中途半端にしか分かってないので
上記のコマンドは動作検証をしたまでで、最適な方法ではないです、多分。。。