Umi Uyuraのブログ

プログラミング関連の作業ログ

Windows 10でPython環境構築 (wingetとPythonランチャー)

基本的にはPython触るならWSL側にHomebrewとasdfで作った環境を使おうと思いますが、Windows側で何かをするときのために、Windows側にもPython環境を作ることにしました。

umi-uyura.hatenablog.com

まだ何もインストールしていないときの環境。

>where python
C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\python.exe

>python --version
Python

デフォルトで python.exe が存在していますが、バージョン情報を表示しようとしても python としか表示されません。

これを実行するとMicrosoft Storeが起動して、ストア版のPythonのページに飛びます。

そこからインストールすることもできますが、ストア版のPythonには制限もあるようなので、Python公式サイトで配布されるインストーラ版を使うことにしました。

参考)

Pythonをインストールする

公式サイトからダウンロードしても良いですが、wingetでもインストールできます。

> winget install -s winget -e --id Python.Python.3

refreshenv コマンドで環境変数を読み直すと、Python関連のパスが2つ追加されていました。

>refreshenv
Refreshing environment variables from registry for cmd.exe. Please wait...Finished..

>set | findstr /i python
Path=(中略)C:\Users\<user>\AppData\Local\Programs\Python\Python310\Scripts\;C:\Users\<user>\AppData\Local\Programs\Python\Python310\;(以降、略)

Pythonコマンドの実体を調べてみます。

>where python
C:\Users\<user>\AppData\Local\Programs\Python\Python310\python.exe
C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\python.exe

>where pip
C:\Users\<user>\AppData\Local\Programs\Python\Python310\Scripts\pip.exe

>where pip3
C:\Users\<user>\AppData\Local\Programs\Python\Python310\Scripts\pip3.exe

>where py
C:\Windows\py.exe

もともと存在していた python.exe に加えて、追加されたPATHの方にも python.exe が見つかりました。

また、複数のPythonのバージョンを切り替えて使えるPythonランチャー(py.exe)もインストールされていることを確認できました。

python でも py でも、バージョン情報が出力されることを確認。

>python --version
Python 3.10.1

>py --version
Python 3.10.1

参考)

PATHは必ずしも通っていなくて良いらしい。

確かに今後別のバージョンを追加したときに混乱しそうなので、いったん以下は環境変数から消して使ってみることにしました。

C:\Users\<user>\AppData\Local\Programs\Python\Python310\
C:\Users\<user>\AppData\Local\Programs\Python\Python310\Scripts\

※このあと3.9を追加インストールする際に、PATHを追加せずにインストールする方法を記載しています。

Pythonランチャー(py.exe)で複数バージョンを切り替えてみる

Pythonランチャーで別のバージョンを使いたい場合は、 py <version> と使いたいバージョンを指定して実行します。

>py <version> <script>      # 最新バージョンで実行
>py -3 <script>             # 3系の最新バージョンで実行
>py -3.9 <script>           # 3.9で実行

指定したバージョンがインストールされていない場合は、その旨表示されます。

>py -3.9 --version
Python 3.9 not found!
Installed Pythons found by py Launcher for Windows
 -3.10-64 *

Requested Python version (3.9) not installed, use -0 for available pythons

試しに -3.9 を指定してみると上記のようなメッセージが表示されましたので、追加で3.9をインストールしてみます。

wingetでインストールできる過去のバージョンは winget show --versions <query> で取得できます。

>winget show --versions --id Python.Python.3
見つかりました Python 3 [Python.Python.3]
バージョン
-----------
3.10.1150.0
3.10.150.0
3.9.7150.0
3.9.6150.0
3.9.5150.0
...

3.9系の最新である 3.9.7150.0 をインストールするため、wingetに --version オプションを付けてバージョンを指定して実行します。

>winget install -s winget -e --id Python.Python.3 --version 3.9.7150.0 --override PrependPath=0

また --override PrependPath=0 を付けることで、環境変数PATHへの追加されずにインストールすることができます。

このときインストーラの画面が開くので、 Add Python 3.9 to PATH のチェックが外れていることを確認して、「Install Now」を選べばOKでした。

f:id:umi-uyura:20211214233022p:plain

インストール後に python の所在を確認してみます。

>where python
C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\python.exe

>py --version
Python 3.10.1

>py -3.9 --version
Python 3.9.7

PATHは追加されていませんが、 py -3.9 で3.9版のバージョンが表示されました。

現在の環境にインストールされているバージョンを一覧表示するには --list もしくは --list-paths を使います。

>py --list
Installed Pythons found by py Launcher for Windows
 -3.10-64 *
 -3.9-64

>py --list-paths
Installed Pythons found by py Launcher for Windows
 -3.10-64       C:\Users\<user>\AppData\Local\Programs\Python\Python310\python.exe *
 -3.9-64        C:\Users\<user>\AppData\Local\Programs\Python\Python39\python.exe

* が付いているバージョンがデフォルトで使われるもので、これは設定で変更することができます。

参考)

Pythonランチャー+venv

Pythonランチャーでvenvが使えるかを確認します。

>py --version
Python 3.10.1

>py -3.9 -m venv .venv

デフォルトが 3.10 の状態で、 3.9 を指定してvenv環境を作ります。

>.venv\Scripts\activate

(.venv) >py --version
Python 3.9.7

activate すると、何も指定しないで実行した py が返すバージョンが 3.9 になりました。

(.venv) >where python
C:\Users\<user>\workspace\python\pyexe-test\.venv\Scripts\python.exe
C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\python.exe

作成したvenv環境の python が優先されるようになっていました。

(.venv) >py --list-paths
Installed Pythons found by py Launcher for Windows
 (venv)         C:\Users\<user>\workspace\python\pyexe-test\.venv\Scripts\python.exe *
 -3.10-64       C:\Users\<user>\AppData\Local\Programs\Python\Python310\python.exe
 -3.9-64        C:\Users\<user>\AppData\Local\Programs\Python\Python39\python.exe

py --list-paths してみても、venv環境が追加されていました。


最新版以外を使う場合は、都度使うバージョンを指定する必要がありますが、いちいち切り替えなくて済むという点では、pyenv方式よりPythonランチャーの方が使い勝手は良いのかも。

とりあえず、Windows側でPython使うときはPythonランチャーを意識して使ってみます。

参考