1. 症状
公式サイトからPythonをインストールしたにもかかわらず python (python3) が実行できない。
1.1. Microsoft Storeへのリンクが開く
Microsoft StoreのPythonへのリンク が開く。
1.2. アクセス違反が発生する
1 2 |
$ python3 hello.py bash: /c/Users/UserName/AppData/Local/Microsoft/WindowsApps/python3: Permission denied |
bashコンソール(≠WSL)から開くとアクセス違反が発生する。
2. 原因
- インストールした python.exe への path が通っていない(パス設定できていない)。
- Windows 10 でデフォルトインストールされている/パスが通っているのは Microsoft Store の Python ページへのランチャーである。 Microsoft Store へ誘導したい気持ちはわかるが同名の実行ファイルは混乱を招く…
- Python はバージョンによって動く/動かない、という互換性の問題が背景にあるため、Pythonランチャー py.exe でバージョンを切換える仕組みになっている。
3. 解決策
3.1. Pythonランチャー py.exe からスクリプトを実行する。
3.1.1. スクリプト実行例
1 |
$ py hello.py |
3.1.2. Pythonバージョン確認
1 |
$ py --version |
3.1.3. pipによるパッケージのインストール
1 |
py -m pip install pillow |
pipコマンドを直接呼び出すのではなく、py.exe ⇒ ほぼ最新版 python.exe ⇒ ほぼ最新版 pipモジュール と経由して呼び出す。このようにすることで特定のバージョンの python.exe, pip.exe にPATHを通す必要なく動的にパッケージをインストールできる。
※ 「ほぼ」最新版とした理由は、あくまでもローカル環境にインストールされた複数のバージョンの中の最新版をPythonランチャーが選択する、という意味です。
3.2. 適切なバージョンの python.exe にパスを通す。
4. 背景
公式インストーラのデフォルトインストールでは python.exe へのパスを設定しない。代わりにPythonランチャー py.exe へのパスが設定されている(実行できる)。複数のバージョンの python.exe をインストールして py.exe でバージョンを切換えることができる。拡張子 "py" の関連付けも py.exe になっている。
UNIX環境などとの互換性を気にしないのであれば、py.exe 経由でpythonスクリプトを実行する方法で十分である。
4. インストールフォルダ
4.1. py.exe
1 |
C:\Windows |
4.2. python.exe
- ver. 3.10 の例
- Windows版の実行ファイルは 3.x系 も "python.exe" (≠python3.exe) である。
4.2.1. for all users
1 |
C:\Program Files\Python\Python310 |
4.2.2. for user
1 |
C:\Users\UserName\AppDate\Local\Programs\Python\Python310 |