1. 記事一覧 >
  2. ブログ記事
VSCode
category logo

VSCode:Win10 Pythonのvenv仮想環境の場合、ブレークポイントで止まらない件

(更新) (公開)

はじめに

Windows 10 の Python の venv 仮想環境にて、VS Code(Visual Studio Code)のデバッガを起動して、設定されたブレークポイント(赤部分)で止まらないことに気付きました。
venv 仮想環境以外の時は、止まりました。
venv の場合、ノーフレームワークで、"Hello World" でさえも止まらず、作った直後の venv でも止まらず、もがき苦しんだ挙句、超簡単な方法で解決しました。


Windows 10 PRO 22H2

Visual Studio Code 1.81.1

Python 3.11.5 venv

の環境で確認しました。その他の環境の場合、状況が異なる可能性があります。

Visual Studio Code 1.81.1(上記 Windows 環境にあって、ssh リモートデバッグ)

Linux(Raspberry Pi Desktop OS)

Python 3.7.3 venv

の環境で確認したところ、特に問題ありませんでした。(何もしなくても venv 環境でブレークポイントが効きました。)


解決方法

いきなり解決方法から書きます。
launch.json

.vscode\launch.json
{
  "configurations": [
    {
      "justMyCode": false
    }
  ]
}

を設定するだけです。


一応、全文載せますが、"justMyCode": false 以外は、自動生成された設定のままです。

.vscode\launch.json
{
  // IntelliSense を使用して利用可能な属性を学べます。
  // 既存の属性の説明をホバーして表示します。
  // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: 現在のファイル",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal",
      "justMyCode": false
    }
  ]
}

ワークスペース=仮想環境 だったらダメなのか?とか、環境変数が必要なのか?パスが通っていないからなのか?とかいろいろ模索した結果、どれも関係なく、この設定1発で解決しました。

この設定は、調査開始直後から分かっていましたが、false にすると、「自分が作ったコード以外もデバッグ範囲に入る」という意味になり、それが嫌だから他の方法を模索しました。なぜ、false にするとブレークポイントで止まるようになるかは、よくわかりませんでした。

参考:(Stack Overflow)Debugger Not Stopping at Breakpoints in VS Code for Python


以降のセクションは、VS Code インストール~ Python インストール~ブレークポイントで止まるのを確認するまでの流れです。
同じような状況の場合、解決すると思われます。


インストール

VS Code と Python 3 をインストールします。
今回使用したのは、
VSCodeUserSetup-x64-1.81.1.exe
python-3.11.5-amd64.exe
です。
インストールの仕方の詳細は、省略しますが、Python 3 インストール時、
Use admin privileges when installing py.exe
Add python.exe to PATH
チェック、
Disable path length limit クリック済みです。

VS Code と Python 3 をインストール


VS Code に Japanese Language Pack 拡張機能をインストールして、日本語化済みとします。


venv 環境作成

今回、
C:\work というフォルダを作成して、
C:\work\venvname という venv 環境を作成するものとします。


cmd.exe で以下のように作成します。

> python -V
Python 3.11.5
> cd C:\work
> python -m venv venvname

C:\work\venvname というフォルダができて、そこには、以下のようなファイル群が生成されています。

Lib/site-packages/*
pyvenv.cfg
Scripts/activate
Scripts/activate.bat
Scripts/Activate.ps1
Scripts/deactivate.bat
Scripts/pip.exe
Scripts/pip3.11.exe
Scripts/pip3.exe
Scripts/python.exe
Scripts/pythonw.exe

VS Code 準備

C:\work\venvname を VS Code で開きます。

VS Code で開く


hello.py を作成します。

print("Hello World")

hello.py を作成


VS Code さんは、気が利いていて、この後インストールしようとしていた Python 拡張機能をインストールするかどうか聞いてきますので、インストール をクリックして、インストールします。

Python 拡張機能をインストール

Pylace(自動補完などの機能)もインストールされていました。


インタープリター(デバッグで実行する Python の実行体)が venv のものになっていない場合、選択します。

インタープリター選択

検証時は、最初から選択されていました。選択されていない場合、選択が必要です。

★ がついた ./Scripts/python.exe がそれです。


VS Code エラー対処

このままデバッグしようとしたり、ターミナルを開けると、以下のエラーになります。

PS C:\work\venvname> & c:/work/venvname/Scripts/Activate.ps1
& : このシステムではスクリプトの実行が無効になっているため、ファイル C
:\work\venvname\Scripts\Activate.ps1 を読み込むことができません。詳細
については、「about_Execution_Policies」(https://go.microsoft.com/fwli
nk/?LinkID=135170) を参照してください。
発生場所 行:1 文字:3
+ & c:/work/venvname/Scripts/Activate.ps1
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurity
Exception
    + FullyQualifiedErrorId : UnauthorizedAccess

settings.json に以下を設定します。

{
  "terminal.integrated.env.windows": {
    "PSExecutionPolicyPreference": "RemoteSigned"
  }
}

CTRL + SHIFT + @ でターミナルを開くと、正常に開きます。

ターミナルを開く

今回の場合は、ワークスペース、つまり、今回開いた C:\work\venvname だけで有効な設定としましたが、ユーザー単位で有効にしても問題ありません。

設定の範囲の考え方は、別記事「VS Code で Python のコードフォーマッター(black)、リンター(flake8)をセットアップ」に詳しく書きましたので、ご確認ください。


デバッグ1(NG)

1 行目の左側をクリックして、ブレークポイントを作成します。
実行とデバッグ をクリックします。

実行とデバッグ


素の Python なので、 Python ファイル を選択します。

Python ファイル選択


デバッグ実行されます。

デバッグ実行(止まらない)

止まらないんかいっ! ってなります。


デバッグ2(OK)

launch.json ファイルを作成します をクリックします。

launch.json ファイルを作成


Python ファイル を選択します。

Python ファイル選択


.vscode\launch.json が自動生成されます。

launch.json が自動生成


"justMyCode": true

"justMyCode": false
に書き換えて上書き保存します。

justMyCode false


もう一度デバッグ実行します。

もう一度デバッグ実行

止まった!ヨシっ!


ノー venv の場合

venv 未使用の ノー venv の場合、何事もなく止まりました。

ノー venv の場合


Linux の場合

別記事「VS Code で Raspberry Pi Desktop へ SSH 接続しようとしたらエラーになった」の Linux 環境 に venv 環境を作成して、ブレークポイントを張ってみたところ、上述の設定は必要なく、ブレークポイントで止まりました。

【確認環境】

Visual Studio Code 1.81.1(Windows - Linux ssh リモートデバッグ)

Linux(Raspberry Pi Desktop OS)

Python 3.7.3 venv

の環境で確認

Linux の場合

loading...