VSCodeのPython拡張機能の「Run Python File in Terminal」の実行コマンドに出たエラーへの対応メモ:PowerShell使用+ディレクトリ名の全角記号「★」が原因
VSCodeのPython拡張機能の「Run Python File in Terminal」=GUI上のボタンを押すだけで、Pythonプログラムの実行コマンドを、デフォルトに指定したターミナルに打ってくれる機能を使用したら、エラーが出てしまった。
→ VSCodeのPython拡張機能が、PowerShellに渡すパスの中から、全角記号の文字が消失してしまうことが原因だったので、コマンドプロンプト使用に切り替えることで対応した。
VSCodeのPython拡張機能の「Run Python File in Terminal」の説明
発生した状況とエラー文
エラーを確認した環境
・OS:Windows10
・VSCode: v1.90.1
・Python:v3.11.0
・PowerShell:v5.1.19041.4412
プロジェクトのディレクトリ
- 中身は「venvの仮想環境」と「Pythonプログラム」だけ
- 絶対パスは
c:/Users/PC_User/Desktop/日本語文字列/日本語文字列/日本語文字列/.venv/Scripts/python.exe
.
├── .venv
└── test.py
VSCode本体とPython拡張機能の設定
- VSCodeのデフォルトターミナル(「Run Python File」で使用するターミナル)はPowerShell。
- VSCodeのPython拡張機能の使用インタプリタ:プロジェクトの
.venv
のpython.exe
を選択
※重要:Python拡張機能の「Run Python File in Terminal」で使用されるターミナルは、VSCodeのデフォルトターミナルで設定しているものになる。
Python拡張機能の「Run Python File」による実行で発生したエラー文
PS c:/Users/PC_User/Desktop/日本語文字列/日本語文字列/日本語文字列> & c:/Users/PC_User/Desktop/日本語文字列/日本語文字列/日本語文字列/.venv/Scripts/python.exe c:/Users/PC_User/Desktop/日本語文字列/日本語文字列/日本語文字列/test.py
& : 用語 'c:/Users/PC_User/Desktop/日本語文字列/日本語文字列/日本語文字列/.venv/Scripts/python.exe' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの
名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 行:1 文字:3
+ & c:/Users/PC_User/Desktop/日本語文字列/日本語文字列/日本語文字列/.venv/Scripts/python.exe.venv/Scripts/pyt ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (c:/Users/PC_Use...ipts/python.exe:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
とりあえず解決
「vscode run python file error powershell」でググったら、2017年にVSCodeのGitHubリポジトリのイシューで、同様のエラー文が出て実行できない問題が報告されていた。「PowerShellではなく、コマンドプロンプトを使用すれば解決する」とのことだった。
これに従って、VSCodeのデフォルトターミナルをPowerShellからコマンドプロンプトに変更した後に、「Run Python File in Terminal」をやってみたら、エラーを出すことなく実行ができた!
※重要なので2回目:Python拡張機能の「Run Python File in Terminal」で使用されるターミナルは、VSCodeのデフォルトターミナルで設定しているものになる。
原因の特定に成功:ディレクトリ名の「★」記号
プロジェクトのパスの日本語文字列の中に、「★」という日本語の全角記号を使用していた。
c:/Users/PC_User/Desktop/日本語文字列/日本語文字列/日本語文字列/test.py
-
c:/Users/PC_User/Desktop/日本語文字列/日本語文字列/日本語文字列/.venv/Scripts/python.exe
ディレクトリ名から「★」を削除してみた所、エラー問題なく実行できることを確認した!
少し検索したら、更新日時が数年前のものだけど、「PowerShellでは全角記号をうまく扱えない」という記事があったので、このエラーもそれに関連することが原因で発生しているのかもしれない。とりあえず、PowerShellで何かをする場合、作業ディレクトリのパスに全角記号が含まれる状況は避けた方が無難かもしれない。
深堀り:全角記号「★」含むディレクトリでエラーが出てしまう理由
VSCodeのPython拡張機能でC:/Python311/python.exe
をインタプリタとして指定。このようなディレクトリ構造にある、それぞれのtest.pyを「Run Python File in Terminal(PowerShell使用)」で実行してみた。
- 「★テスト/test.py」:
print("abcdef:全角記号含む「★テスト」のtest.py")
- 「テスト/test.py」:
print("テストのtest.py")
.
├── テスト
│ └── test.py
└── ★テスト
└── test.py
PowerShellに流されるパスから「★」の部分が消失してしまう?
VSCodeのPython拡張機能で、PowerShellを使用している状態で、「Run Python File in Terminal」を使ってPythonプログラム実行のコマンドを打つと、パスに含まれる全角記号「★」が消えてしまう現象があるようだった。
「★テスト/test.py」の実行結果
PS C:\Users\PC_User\Desktop\python_test> & C:/Python311/python.exe c:/Users/PC_User/Desktop/python_test/テスト/test.py
テストのtest.py
「テスト/test.py」の実行結果
PS C:\Users\PC_User\Desktop\python_test> & C:/Python311/python.exe c:/Users/PC_User/Desktop/python_test/テスト/test.py
テストのtest.py