LoginSignup
2
2

More than 5 years have passed since last update.

pipをアップデートするスクリプト

Last updated at Posted at 2018-10-23

初めての記事がこんなので良いのだろうかと思うのですが、誤記等あればご指摘ください。

pipをアップデートする

pip-reviewなんかを使うことが一般的かと思います。ただ、pip-reviewとやっても、pip list -oとやっても、アップデートすべきリストというのは出てきますが、リストから手動でアップデートしなければなりません。

なので、python3+pipを入れている環境限定になりますが、OSコマンドを発行した出力を引っ張ってきて、すべてアップデートするスクリプトを作ってみました。個別に入れる・入れないを判断する場合には使えません。すべてアップデートされます(本当は1個ずつ「アップデートしますか?」と聞くのが良いのでしょうが)。

python3にパスが通っていることは確認してください。which python3で確認することができます。
また、pipが必要です。バージョンによって同梱されていることもあるようです。

update.py
import subprocess #OSコマンドが実行できるようにします。

print("Update start")

# npmもアップデートしたいときは、以下の2行をコメントインしてください。
# print("Updating: npm")
# subprocess.run(["npm", "update"])

# brewもアップデートしたいときは、以下の6行をコメントインしてください。
#print("Updating: brew")
#subprocess.run(["brew", "update"])
#print("Updating: brew")
#subprocess.run(["brew", "upgrade", "--clean"])
#print("Cleanup: brew")
#subprocess.run(["brew", "cleanup"])

print("Updating: pip")

# UPDATE_LISTに、コマンド実行の結果をそのまま格納します。
# コマンドは空白を使えないので、空白ごとにカンマで区切ります。
# 以下では、[pip lise -o]を実行し、その結果を格納しています。
UPDATE_LIST = (subprocess.run(["pip", "list", "-o"],stdout=subprocess.PIPE))

# 出力の結果を行単位に分割します。
Packages = str(UPDATE_LIST.stdout).split('\\n')

# 出力の先頭2行はタイトルと区切り線なので、捨ててしまいます。
# パッケージ名とバージョン番号のセットで出てくるので、空白で区切った先頭をパッケージ名として取得します。
# そのパッケージ名を [pip install -U] します。
# uasiさんからコメントをいただきましたので修正しました。ありがとうございます。
for package in Packages[2:]:
    name = package.split()[0]
    print("Updating: " + name)
    subprocess.run(["pip", "install", "-U", name])

print("Update finished.")

もうちょっとこなれた書き方にすべきとは思いましたが、動作確認のできる環境がないので、みなさんからのコメントを伺いながらブラッシュアップしていきます。

動かすとき

python3 ./update.py

動かした結果

$ python3 ./update.py
Update start
Updating: npm   
Updating: brew
Updated 2 taps (homebrew/core and homebrew/cask).
==> Updated Formulae
bup                         imagemagick                 libsoup
gjs                         imagemagick@6               varnish
==> Deleted Formulae
taylor                                    tcptrack
Updating: brew 
Cleanup: brew
Updating: pip
Update finished.
$
2
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2