Windows 10でPython環境構築 (wingetとPythonランチャー)
基本的にはPython触るならWSL側にHomebrewとasdfで作った環境を使おうと思いますが、Windows側で何かをするときのために、Windows側にもPython環境を作ることにしました。
まだ何もインストールしていないときの環境。
>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でした。
インストール後に 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ランチャーを意識して使ってみます。