Skip to content
| Marketplace
Sign in
Visual Studio Code>Debuggers>PyBP - Persistent Python Session RunnerNew to Visual Studio Code? Get it now.
PyBP - Persistent Python Session Runner

PyBP - Persistent Python Session Runner

bisan

| (0) | Free
F5 runs your script in a persistent IPython session: breakpoints work without debugpy, and variables and figures stay alive after the run.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

PyBP — 変数も図も残る Python 実行環境

F5 で Python スクリプトを 常駐 IPython セッションの中で実行します。エディタの赤丸(ブレークポイント)で 停止でき、実行が終わっても変数と figure は生きたまま残ります。実行後にそのまま変数を確認したり、 続きの計算をしたりできます。MATLAB のコマンドウィンドウに近い使い心地です。

debugpy は使いません(中身は IPython + ipdb)。赤丸を1つも置かなければトレースは入らないので、 通常の python script.py と同じ速度で走ります。


インストール

  1. .vsix を受け取ったフォルダで:

    code --install-extension pybp-0.2.0.vsix
    
  2. VS Code を完全に終了して、開き直してください。 ウィンドウの再読み込みだけでは足りません。

  3. 入ったか確認するには:

    code --list-extensions
    

    bisan.pybp が出れば OK です。

必要なもの

Python 3.9 以上(3.9 〜 3.13 で動作します)。

使う Python に以下が入っている必要があります。

パッケージ 用途
ipython セッション本体
ipdb 赤丸での停止・ステップ実行
matplotlib 図の表示
tornado 既定の webagg バックエンド(図を VS Code のタブに出すのに必須)

不足していても大丈夫です。 初回の F5 で拡張が自動的に検出し、 「PyBP: 依存パッケージが不足しています(…)」という通知で [インストール] を選べば python -m pip install … を実行します。[あとで]を選んでもセッション自体は起動します。

自分で入れるなら:

python -m pip install ipython ipdb matplotlib tornado

Python 3.9 の場合、pip が自動的にその版に対応するバージョン (ipython 8.18 系 / matplotlib 3.9 系)を選びます。バージョン指定は不要です。

pybp パッケージ本体はこの拡張に同梱されています。pip install pybp は不要です。


はじめての実行

  1. フォルダを開きます(ファイル → フォルダーを開く)。 これは重要です。PyBP は開いたフォルダの .vscode/ を通して拡張と Python がやり取りするため、 ファイル単体で開いた状態では赤丸が効きません。 スクリプトも、開いたフォルダの中に置いてください。
  2. .py ファイルを開きます。
  3. 行番号の左をクリックして赤丸を置きます(VS Code の標準機能です)。
  4. F5。ターミナル「PyBP」が開き、[pybp] session started (webagg backend) と表示されます。
  5. 赤丸の行で実行が止まり、その行がハイライトされます。ステータスバーに PyBP: ファイル名:行番号 が黄色く出ます。
  6. F5 で続行、F10 で次の行へ。最後まで走ると IPython プロンプト In [n]: に戻ります。
  7. ここで変数がそのまま残っています。 プロンプトで変数名を打てば中身を確認できます。

使い方

キー操作

キー 状態 動作
F5 通常 初回: セッション起動 + 実行 / 2回目以降: 同じセッションで再実行
F5 停止中 続行 (c)
F10 停止中 ステップオーバー (n)
F11 停止中 ステップイン (s)
Shift+F11 停止中 ステップアウト (r)
Shift+F5 停止中 デバッガを抜ける (q) → IPython プロンプトへ
Ctrl+Shift+F5 通常 セッションを破棄して最初から起動し直す
Ctrl+C Figure タブ その figure の画像をクリップボードへコピー

エディタ右上のツールバーにも同じボタンが並びます(▷ 実行 / 続行 / ステップ / 停止 / 再起動 / 📈 Figure を開く)。 すべて Ctrl+Shift+P のコマンドパレットから PyBP: で呼ぶこともできます。

F5 を押すとファイルは自動保存されてから実行されます。

2回目以降が速い理由

1回目の F5 で IPython セッションが立ち上がり、そのセッションは実行後も生き続けます。 2回目以降の F5 は同じセッションに再実行を投げるだけなので、起動のオーバーヘッドがありません。 スクリプトはセッションの名前空間の中で実行されるため、定義された変数はそのまま残ります。

  • %reset でワークスペースをクリア
  • exit でセッション終了
  • 自作モジュールは autoreload が有効なので、編集すると次の実行に自動で反映されます (挙動が怪しくなったら Ctrl+Shift+F5 でセッションごと作り直してください)
  • IPython プロンプトから %pybp "C:\path\to\script.py" と手で打っても同じ実行ができます

赤丸について

  • 条件付きブレークポイントに対応しています。 赤丸を右クリック →「条件付きブレークポイントの編集」
  • 赤丸を無効化(グレー)すると、その行では止まりません
  • 停止中に赤丸を足したり消したりできます。 次の続行・ステップ操作から反映されます
  • 赤丸が1つも無ければトレースは一切入らず、素の速度で走ります

エラーが出たとき

例外が発生すると、そのエラーが起きた行で自動的に停止します(ポストモーテムデバッグ)。 エディタ上でエラー行がハイライトされ、ipdb> プロンプトでその時点の変数をそのまま調べられます。 ライブラリの内部ではなく、自分のコードの一番深い場所が選ばれます。 調べ終わったら q(または Shift+F5)で抜けてください。


図(figure)について

matplotlib の figure は webagg バックエンドでノンブロッキング表示され、figure ごとに VS Code のタブが開きます。 plt.show() で実行が止まることはありません。実行が終わってもタブは残ります。

  • コピー: タブ右上の 📋、グラフのツールバーの Copy、または Ctrl+C で、その figure の画像を クリップボードへ入れます。Word / PowerPoint にそのまま貼り付けられます (Windows のみ。VS Code のクリップボード API がテキスト専用のため、PowerShell 経由で実装しています)
  • 保存: ツールバーの 💾 は VS Code の保存ダイアログを開きます。形式は隣のドロップダウン (png / svg / pdf など)に従います
  • plt.close(n) で閉じた figure のタブは自動的に閉じます。plt.close("all") で全部閉じます
  • タブを自分で閉じても figure 自体は生きているので、PyBP: Open Figures(📈 ボタン)で開き直せます
  • 自動で開いてほしくない場合は設定 pybp.figureDisplay を manual に。 figure は作られたままなので、PyBP: Open Figures(📈)で必要なときだけ開けます
  • タブではなく OS の別ウィンドウに出したい場合は pybp.figureDisplay を window に。 matplotlib の Qt / Tk バックエンドに切り替わり、webagg サーバーは起動しません (どちらを使うかは pybp.windowBackend。auto なら PyQt / PySide → tkinter の順に探します)。 この場合 Figure タブが無いので、📋 コピーと VS Code の保存ダイアログは使えません。 matplotlib のウィンドウに付いている標準のツールバーを使ってください
  • 図を一切出したくない場合は pybp.figureDisplay を none に。webagg サーバーを 起動しないのでポート(既定 8988)も使いません。Agg バックエンドになるため plt.show() は何もせず、fig.savefig("out.png") でのファイル出力はそのまま使えます

設定

Ctrl+, の設定画面で pybp を検索してください。

設定 既定 内容
pybp.pythonPath python セッション起動に使う Python 実行ファイル。フルパス可
pybp.webaggPort 8988 図の表示に使うポート。他のアプリと衝突する場合に変更
pybp.useBundledPython true 同梱の pybp を使う。通常は true のままにしてください
pybp.figureDisplay tab 図の表示先。tab(タブを自動で開く)/ manual(タブだが自動で開かない)/ window(別ウィンドウ)/ none(表示しない)
pybp.windowBackend auto figureDisplay が window のときのバックエンド。auto / qt / tk
pybp.autoOpenFigures true 非推奨。pybp.figureDisplay に統合されました(false は manual と同じ)

pybp.figureDisplay を変えたら Ctrl+Shift+F5 でセッションを作り直してください (バックエンドは起動時に決まります)。確認のダイアログも出ます。

ターミナルから python -m pybp を直接起動する場合は、環境変数 PYBP_MPL で バックエンドを指定できます(既定 webagg。qt / tk / inline / none / auto)。


うまく動かないとき

症状 原因と対処
赤丸を置いても止まらない フォルダを開かずファイル単体で開いています。フォルダーを開くで開き直し、スクリプトをそのフォルダ内に置いてください
PyBP: Python を実行できません pybp.pythonPath が正しい Python を指していません。フルパスで指定してみてください
依存パッケージの確認が毎回出る pybp.pythonPath が、依存を入れた Python と別のものを指しています。ターミナルで python -c "import sys; print(sys.executable)" を実行し、その結果を pybp.pythonPath に設定してください
F5 が反応しない / コマンドが無い VS Code を完全終了して開き直してください。それでも駄目なら code --uninstall-extension local.pybp の後に再インストール
pybp を import できません と出る 拡張に同梱された pybp に PYTHONPATH が通っていません。設定 pybp.useBundledPython が true になっているか確認し、拡張を入れ直して VS Code を完全終了・再起動してください
No module named 'IPython' などで落ちる pybp.pythonPath の Python に依存が入っていません。F5 で出る[インストール]を選ぶか、python -m pip install ipython ipdb matplotlib tornado を実行してください
図が出ない / タブが空白 pybp.webaggPort(既定 8988)が他のアプリと衝突しています。別の番号に変えてセッションを再起動(Ctrl+Shift+F5)してください。タブが空白のままならパネルの境界をドラッグしてサイズを変えると描画されます
図のコピーができない Windows のみ対応です。macOS / Linux では 💾 での保存を使ってください
セッションがおかしくなった Ctrl+Shift+F5 でセッションを作り直してください。それでも駄目ならターミナル「PyBP」を閉じてから F5

原因が分からないときは、ワークスペースの .vscode/py_ext_log.txt に拡張側の動作ログが残っています (セッション起動のたびに書き直されます)。これを添えて報告してもらえると調査できます。

.vscode/ に出てくるファイル

PyBP は拡張と Python の間のやり取りに、開いているフォルダの .vscode/ 直下を使います。 自動で作られ、セッション終了時に消えます。手で編集する必要はありません。

ファイル 中身
py_breakpoints.json 拡張 → Python : 赤丸の一覧
py_debug_state.json Python → 拡張 : 現在の停止位置
py_session.json Python → 拡張 : セッションが生きているかの通知
py_figures.json Python → 拡張 : 表示中の figure 番号
py_save_request.json Python → 拡張 : 図の保存ダイアログ要求
py_ext_log.txt 拡張の動作ログ(調査用)

git で管理しているフォルダなら、.gitignore に .vscode/py_* を足しておくと邪魔になりません。


制約

  • 赤丸がある実行では pdb のトレースが入るため、重い数値計算は遅くなります(赤丸ゼロなら素の速度)
  • 停止中のマウスホバーによる変数表示には未対応です。ipdb> プロンプトで変数名を打ってください
  • 標準ライブラリ・IPython・matplotlib の内部には F11(ステップイン)でも入りません
  • 図のクリップボードコピーは Windows のみです
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft