sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

WinGet を利用した Python の更新(windows 編)

Windows 環境で Python を更新するときの流れを記録しました。

更新の必要有無を確認

とりあえず、デフォルトの Windows 環境で Python のチェック方法を記録します。コマンドプロンプトを開いて、バージョンをチェックする。

python -V

ここで「python3- V」というコマンドが紹介されていることもあります。Windows 環境では Python 3.X をインストールすると python コマンドが割り当てられるみたいです。python3 は自動的に割り当てられないことがあります。

自分の環境では以下のようになっていました。Windows Store App の Python だけだと、コマンドプロンプトで「python3 -V」を入れたときに「Python」が返ってくる状態になるみたいです。

where python3
> C:\Users\#user-name#\AppData\Local\Microsoft\WindowsApps\python3.exe
where python
> C:\Users\#user-name#\AppData\Local\Programs\Python\Python312\python.exe
> C:\Users\#user-name#\AppData\Local\Microsoft\WindowsApps\python.exe
py -0p
-V:3.12 *        C:\Users\#user-name#\AppData\Local\Programs\Python\Python312\python.exe
コマンド python バージョン 説明
python 環境依存 (3.X or 2.X) デフォルトの python を実行
python3 3.X Python 3.X を明示的に実行(主に Linux 用)
py 最新の python バージョン管理が可能 (主に Windows 用)

なんで、Windows 環境では py コマンドが python3 コマンドみたいなものなので、便利だと思います。とはいえ、バージョン更新までしてくれるわけではない。

一般的には、それは「役割が違うよね」ということになるので、やはり「パッケージマネージャ」に頼る必要があります。しかし、Windows はデフォルトだとパッケージマネージャの用意がない(はずな)ので、結局マニュアルで HP からダウンロードしてアップデートすることになる……のですが、今回は「winget」を利用してアップデートする例を示します。

winget

すこし前までは windows 環境でパッケージマネージャーをしようとするとサードパーティの Chocolatey や Scoop を利用することになったと思います。

winget は microsoft が提供しているパッケージマネージャーで、徐々に使われるようになってきていると思います。

winget のバージョン確認は、以下のどちらかのコマンドをコマンドプロンプトで実行してください。もしも、インストールされていなかったら、Windows Store からインストールします。Windows Store アプリであれば、winget 本体のバージョン管理は自動的に更新されるようになるはずなので「楽」です。

winget
winget -info

コマンド:

コマンド 説明
install 指定されたパッケージをインストール
show パッケージに関する情報を表示します
source パッケージのソースの管理
search アプリの基本情報を見つけて表示
list インストール済みパッケージを表示する
upgrade 利用可能なアップグレードの表示と実行
uninstall 指定されたパッケージをアンインストール
hash インストーラー ファイルをハッシュするヘルパー
validate マニフェスト ファイルを検証
settings 設定を開くか、管理者設定を設定する
features 試験的な機能の状態を表示
export インストールされているパッケージのリストをエクスポート
import ファイル中のすべてのパッケージをインストール
pin パッケージ ピンの管理
configure システムを適切な状態に構成します
download 指定されたパッケージからインストーラをダウンロードする
repair 選択したパッケージを修復します

オプション:

オプション 説明
-v,--version ツールのバージョンを表示
--info ツールの一般情報を表示
-?,--help 選択したコマンドに関するヘルプを表示
--wait 終了する前に任意のキーを押すプロンプトをユーザーに表示
--logs,--open-logs 既定のログの場所を開く
--verbose,--verbose-logs WinGet の詳細ログを有効にする
--nowarn,--ignore-warnings 警告出力を非表示にする
--disable-interactivity 対話型プロンプトを無効にします
--proxy この実行に使用するプロキシを設定
--no-proxy この実行に対するプロキシの使用を無効にする

更新

winget upgrade --all
winget upgrade --all --silent

初回はサイレントにしなくてもいいかもと思います。サイレント実行をすると、管理者権限が必要になる場合もあってこのときは Powershell の管理者モードで実行するといい。

サイレントにしていない場合は、各ソフトウェアのポップアップが表示されるので、邪魔に思うかもしれないけど初回はこれくらいのほうが安全じゃないかな、という意見です。

これで python もまとめてアップデートできる。正直、アップデートをしない半端なバージョンを許さないほうがいいと思う考えで、バージョンを固定したいときは、下記の pin であらかじめ固定しておいて、他は --all ですべて更新がよいと思っています。

どうしても個別にやりたいときは python を例に挙げると、最初に list で ID を確認します。

winget list python

確認できた ID に対して upgrade を実行する。

winget upgrade --id Python.Python.3

念のため、最後にコマンドプロンプトでバージョンが変わっているかどうかもチェックしておこう。

python -V

バージョンの固定

アップデートしないパッケージは pin を使ってバージョンを固定します。

winget pin add <package>

こうしておくと upgrage --all といったアップデートの対象外になる。pin に追加した一覧を確認したいときは以下。

winget pin list
コマンド 説明
add 新しい PIN を追加する
remove パッケージ PIN の削除
list 現在のピンを一覧表示する
reset PIN をリセット

おまけ:インストールのバッチ化

winget で管理できるアプリは「winget.run」で探す。

簡単な .bat ファイルを作成することで、ソフトウェアのインストール状態をまとめることが可能なので便利だと思います。

echo off
winget install -e --id RARLab.WinRAR
winget install -e --id Google.Chrome
winget install -e --id Google.Drive
winget install -e --id OBSProject.OBSStudio
winget install -e --id Dropbox.Dropbox
winget install -e --id Greenshot.Greenshot
winget install -e --id Notion.Notion
winget install -e --id KeePassXCTeam.KeePassXC
echo on

参考