Help us understand the problem. What is going on with this article?

転職黙示録(6) Poetryで作ったFastAPIアプリをVSCode Debuggerでデバッグする

Visual Studio Code(VSCode)によるPoetryプロジェクトのデバッグ

モチベーション

 方向性も定まらないのでWebフレームワークが何しているのか理解しようとFastAPIのソースでも読むかと思ったのだがpoetryの仮想環境がVSCodeで認識されなかった.

poetry shellで仮想環境を有効にする

 基本は公式のDebuggingにあるようにuvicornをモジュールとして追加してトップレベルのコードとして実行する.

 問題はpoetryが作る仮想環境をどうやってVSCodeに認識させるかである. VSCodeはpyenvからインストールしたインタプリタについては勝手に認識してくれる. 適当なPythonファイルを開くとステータス・バーの左端に現在のインタプリタが表示される. ここをクリックするとインタプリタの選択肢が表示される. pyenvと最後についているのがpyenvから導入したインタプリタになる.

vscode_status_bar.png

 ところがPoetryのプロジェクトだと自動的に仮想環境が作られるがこの環境は勝手には認識されない. poetry addでインストールされたパッケージは全てこの仮想環境下で管理されるのでこの環境が認識されないとデバッガーがModuleNotFoundErrorを表示して停止する.

ModuleNotFoundError.png

 仮想環境を認識させるためにはVSCodeを開く前にpoetry shellで仮想環境を有効にしておく必要がある. 一度VSCodeを閉じてPoetryプロジェクトに移動してpoetry shellを実行する. その状態で

poetry new hoge
cd hoge
poetry shell
vscode .

 macOSなら~/Library/Caches/poetry/virtualenvs以下に作られた仮想環境が選択できるようになる.

プロジェクト直下で仮想環境を管理する

 Poetryはデフォルトでは仮想環境を~/Library/Caches/poetry/virtualenvs以下で管理しているようである. プロジェクト名から自動的にproject-py3.xのような仮想環境が構築される. この命名法から推測すると特定の環境を作ってプロジェクト間で共有するというわけでもなさそうである.

 なので単純にプロジェクトごとにファイルを作ってしまっても同じだと思う. poetry config --listを実行するとsettings.virtualenvs.in-projectがfalseになっている. 設定の変更は非常に簡単にできる.

poetry config settings.virtualenvs.in-project true

 これでpoetry addするとプロジェクトの直下に.venvというフォルダが生成され, こちらはVSCodeが自動で認識してくれる.

auto-select-virtual-env.png

 またプロジェクトを消せば仮想環境に関する設定ファイルも削除してくれるので, 仮想環境だけが残るということがない.

 こちらの方が良さそうですね:hugging:

launch.jsonの設定

 以上でデバッグしながらステップ・インでFastAPIのソースが眺められると思ったわけですが, デフォルトではサードパーティのコードは見れないらしいです. この場合justMyCodeという項目を追加すれば良い.1

launch-json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "justMyCode": false
        }
    ]
}

まとめ

 Poetryで作ったプロジェクトをVSCodeのデバッガーでデバッグするならsettings.virtualenvs.in-projectは有効化した方が良さそうです.

参考


  1. 補完されるから必要ないと思うがリンクを貼っておく. 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした