VSCode & Python & venv でデバッグ実行
題名の通りですが
- VSCode
- Python
- venv
を使う環境で、ローカルのpythonプログラムをデバッグ実行します。
また、デバッグ時に引数を動的・静的に渡せるようにします。
事前準備
- Pythonのインストール (venvがある3.3~)
- VSCodeのインストール
どちらでも動くとは思いますが、筆者はWindows10環境です - VSCodeのpython拡張機能のインストール
PythonとPython Debuggerは必須です
インストール方法はいくらでも出てきますので、ここでは割愛させていただきます。
PythonはWindowsの場合Microsoft Storeからのインストール、
Linuxの場合はそれぞれのPackage Managerで入れるのが比較的簡単かつ安定です。
venv (pythonの仮想環境)の作成
pythonの仮想環境を用意します。
プログラマーであれば自分のOA機器などの実環境に特定のプログラムに依存するライブラリをインストールするのは気が引けるでしょう。
そのために便利なのがvenvです。venvを使えばpipでインストールするパッケージを実環境と隔離することができます。
VSCodeのターミナルを開き(PowerShellのターミナルでもOKです)、以下のコマンドを実行します。
VSCode上でもできるみたいですが、ここではコマンドで作成しています。
python -V # 実環境のpython version
Python 3.12.4
python -m venv .venv # .venvという仮想環境を作成
.\.venv\Scripts\activate # 仮想環境のアクティベート
これでvenvを使った仮想環境になりました。
以降、pythonやpipのコマンドはこの仮想環境内のコマンド扱いになります。ただし、このターミナルのセッションのみ有効です。
ここで
pip install requests # requestsパッケージをインストール
を実行すれば、仮想環境内にパッケージをインストールすることができます。
ここでは例として、HTTP Requestを発行するパッケージの requests
を入れます。
仮想環境を抜けたいときは
deactivate
コマンドを実行すると、仮想環境を抜けて元の環境に戻ります。
venvポイント
急いでいる方は読み飛ばしてかまいません。
venvのポイントとなるのは、作成した仮想環境のディレクトリ内を見ると
のような構成になっていることです。
そのままの通りですが、作成したディレクトリ内にpythonとpipのexeファイルとLibディレクトリが用意されています。
つまり、ここに仮想環境のインタプリタと依存ライブラリの格納先が確保されているみたいですね。
先ほどの .\.venv\Scripts\activate
のコマンドを実行すると、pythonのコマンドが、.\.venv\Scripts\python.exe
にすり替わる形となっているようですね。
(つまり、activateしなくても上記のpythonパスを指定して実行すれば仮想環境内のpythonが利用できる)
VSCodeのインタプリタ設定
-
作成するpythonのプログラムをエディタで開きます
-
Ctrl + Shift + P
でVSCodeのコマンド検索に入り、Python: Select Interpreter
と入力し、選択します
(おそらく入力補完ですぐ出てくると思います) -
インタプリタを、作成した.venv配下の
python.exe
を指定します
今回は直接選択肢に出てきてますが、表示されない場合は
Inter interpreter path...
から直接指定してくださいこれによって、VSCode経由でpythonのファイルを実行するときに、指定した仮想環境内のインタプリタが使われるようになります。
デバッグ実行
では、VSCodeを使ってデバッグ実行してみましょう。
今回は以下のような簡単なプログラムを用意しました。
-
プログラムの用意
import requests import sys def main(): res = requests.get(sys.argv[1]) print(res.status_code) if __name__ == '__main__': main()
なんということもない、引数に指定したURLへアクセスしてそのHTTPステータスコードを出力するプログラムです。
test.py
など適当な名前をつけてファイルを作成し、エディタで開きましょう。 -
デバッグ構成(launch.json)の作成
左側のアイコンから、「実行とデバッグ」を選択します。
その後、「
launch.json
ファイルを作成します」を選択し、「デバッグ構成を選択する」で引数含むPythonファイル
を選択しましょう。
Python
ファイルを選択してしまっても、後からlaunch.json
ファイルで変更可能です。 -
launch.json
ファイルの変更launch.json
ファイルは、VSCodeでデバッグを行う際の設定を記述するファイルです。
(以下、jsonなのにコメントがあるとqiita側の表示でエラーになりますが、VSCode上だとデフォルトでコメントが入ってます){ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "My Python Program", // 任意の名前 "type": "debugpy", "request": "launch", "program": "${file}", // fileだと開いているファイルを実行します。常に一意の.pyファイルを指定することもできます。 "console": "integratedTerminal", "args": "${command:pickArgs}" // 毎回引数を入力します。常に同じ引数にしたい場合、ここに固定値を指定すればOKです。 } ] }
-
デバッグしてみる
では、ようやくデバッグです。
test.py
を開き任意の行にブレイクポイントを設定します。
その後左側のアイコンから「実行とデバッグ」を選択、先ほど作成したlaunch.json
のname
に指定した名前を選択してデバッグを開始します。
引数を聞かれるため、引数を入力します。ここではhttps://www.google.com
を入力しました。デバッグ実行が始まり、ブレイクポイントで止まりました。
ここからは変数の中身を見たりステップインしたり好きにデバッグできます。
余談
インタプリタの設定は launch.json
には記述できないみたいですね。
あと launch.json
はjsonなのにコメントできるんだなーと感心してました。