2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCode&Python&venvでデバッグ実行

Posted at

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です)、以下のコマンドを実行します。
:point_left: 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

コマンドを実行すると、仮想環境を抜けて元の環境に戻ります。

:bulb: venvポイント

急いでいる方は読み飛ばしてかまいません。
venvのポイントとなるのは、作成した仮想環境のディレクトリ内を見ると

image.png

のような構成になっていることです。
そのままの通りですが、作成したディレクトリ内にpythonとpipのexeファイルとLibディレクトリが用意されています。
つまり、ここに仮想環境のインタプリタと依存ライブラリの格納先が確保されているみたいですね。

先ほどの .\.venv\Scripts\activate のコマンドを実行すると、pythonのコマンドが、.\.venv\Scripts\python.exe にすり替わる形となっているようですね。
(つまり、activateしなくても上記のpythonパスを指定して実行すれば仮想環境内のpythonが利用できる)

VSCodeのインタプリタ設定

  1. 作成するpythonのプログラムをエディタで開きます

  2. Ctrl + Shift + P でVSCodeのコマンド検索に入り、Python: Select Interpreter と入力し、選択します
    (おそらく入力補完ですぐ出てくると思います)

    image.png

  3. インタプリタを、作成した.venv配下の python.exe を指定します
    :bulb: 今回は直接選択肢に出てきてますが、表示されない場合はInter interpreter path... から直接指定してください

    image.png

    これによって、VSCode経由でpythonのファイルを実行するときに、指定した仮想環境内のインタプリタが使われるようになります。

デバッグ実行

では、VSCodeを使ってデバッグ実行してみましょう。
今回は以下のような簡単なプログラムを用意しました。

  1. プログラムの用意

    import requests
    import sys
    
    def main():
        res = requests.get(sys.argv[1])
        print(res.status_code)
    
    if __name__ == '__main__':
        main()
    

    なんということもない、引数に指定したURLへアクセスしてそのHTTPステータスコードを出力するプログラムです。
    test.py など適当な名前をつけてファイルを作成し、エディタで開きましょう。

  2. デバッグ構成(launch.json)の作成

    左側のアイコンから、「実行とデバッグ」を選択します。

    image.png

    その後、「launch.jsonファイルを作成します」を選択し、「デバッグ構成を選択する」で 引数含むPythonファイル を選択しましょう。
    Python ファイルを選択してしまっても、後からlaunch.jsonファイルで変更可能です。

    image.png

  3. 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です。
            }
        ]
    }
    
  4. デバッグしてみる

    では、ようやくデバッグです。
    test.py を開き任意の行にブレイクポイントを設定します。
    その後左側のアイコンから「実行とデバッグ」を選択、先ほど作成した launch.jsonname に指定した名前を選択してデバッグを開始します。
    引数を聞かれるため、引数を入力します。ここでは https://www.google.com を入力しました。

    image.png
    image.png

    デバッグ実行が始まり、ブレイクポイントで止まりました。
    ここからは変数の中身を見たりステップインしたり好きにデバッグできます。

余談

インタプリタの設定は launch.json には記述できないみたいですね。
あと launch.json はjsonなのにコメントできるんだなーと感心してました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?