5
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?

More than 1 year has passed since last update.

2022年 Visual Studio Code で Python 3.6 のデバッグ出来ない

Last updated at Posted at 2022-12-07

結論

先に結論を書きます。

Visual Studio Code で Python 開発をするとき際に使用されるであろう Python 拡張機能(拡張機能ID ms-python.python、以下 ms-python.python と表記)は古いバージョンのデバッグすることができません。

TIP
後述しますが、 v2022.18.2 時点ではデバッグが出来ないというのが正しいです。
将来的には古い Python バージョンでもデバッグ出来るようになるかもしれません。

ms-python.python と説明されても、Visual Studio Code の拡張機能をIDで識別する人はほとんどいないと思うので、拡張機能画面で表示した時の画像を添付します。

ms-python.png

ms-python.python で Python 3.6 のデバッグをしたい場合は拡張機能のバージョンを v2022.8.1 に戻す必要があります。

Visual Studio Code の拡張機能画面から過去のバージョンに戻すためには「アンインストール」のリストから「別のバージョンをインストール」を選択、その後に表示されるバージョン検索バーに 2022.8.1 を入力して該当のバージョンの拡張機能をインストールします。

install_other_version_1.png

install_other_version_2.png

NOTE
あたりまえですが、拡張機能のバージョンが古いので該当のバージョン以降に追加された機能は利用できません。

  • 2022/12/08 追記
    ms-python.python v2022.20.0 でサポートされていないバージョンの Python を使用している場合に警告ダイアログが表示されるようになりました。

Visual Studio Code の Python 拡張機能でデバッグができない

記事を読んでいる方が似たような事象に遭遇した時、私が遭遇した問題と同じ原因か比較できるように情報を残します。

概要

2022年になってから Python 3.6 で動作しているソースコードを改修することになりました。

Python 3.6 は 2021年12月でセキュリティサポートも終了しています。
しかし、今回改修するのは本稼働中のスクリプトだったので、Python 事態のバージョンアップは行わずに改修だけを行うのが作業のスコープになっていました。

私は改修対象スクリプトの存在はしっていましたが、ソースコードを直接編集するのは初めてだったので Python スクリプト内にどういった機能があるのかは把握していませんでした。

残念ながらプログラム設計などに関するドキュメントは残されていなかったので、ある程度ソースコードを眺めたところでデバッグを行って動作を追いかけることにしました。

Visual Studio Code のデバッグ機能でデバッグ始めようとすると・・・、デバッグが出来ないことに気が付きました。
より正確には、デバッガーが起動した直後にデバッグが終了しているのが確認できます。

Visual Studio Code 上ではデバッグツールバーが1秒弱表示されたかと思うと、すぐに消えてしまうという状況でした。

デバッグ開始後にすぐに消えるデバッグツールバー:
debug_toolbar.png

この時に Visual Studio Code 上でエラーメッセージが何も表示されることはありませんでした。

原因の切り分け

開発作業は Python 3.6 の Docker コンテナ上で行っていましたが、 Python 3.10 や Python 3.8 の Docker コンテナではデバッグが出来ていました。

何らかの差分でデバッグが出来ていないと予測して原因の切り分けを開始しました。

まず、そもそもスクリプトが正常に動作する環境が整えられていない可能性を考えて直接 Python コマンドでスクリプトを起動してみましたが、この方法だとスクリプトが実行できることが分かりました。

$ python aybabtu.py

次に .vscode/launch.json で指定している Python のデバッグ設定に問題が無いか確認しましたが、
Python 3.10 などのデバッグ構成との間に気になる差分がありませんでした。

.vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: aybabtu",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/aybabtu.py",
            "console": "integratedTerminal",
            "justMyCode": true
        }
    ]
}

続けて拡張機能の issue を確認すると、同じような問題に遭遇している方の issue が何件か見つかりました。

issue に書かれている内容を確認すると「debugpy のバージョンがアップグレードされた」ので「Python 3.6 のデバッグは出来ない」。
「拡張機能のバージョンを v2022.8.* にダウングレードするのが回避策」といったように案内されていました。

Python 3.6 のデバッグが出来なくなった理由

issue などで名前が出てきていますが、 ms-python.python は Python のデバッグを行うときに debugpy というライブラリを使用しています。

TIP
このライブラリも ms-python.python と同じように Microsoft 社がメンテナンスしているようです。

ms-python.python は Typescript で書かれているけれど、デバッグの部分だけは debugpy に頼っているという形態のようです。

そして、debugpyこのコミット Python 3.6 サポートは打ち切ったようです。
このコミットが行われた次のリリースが debugpy v1.6.0 なので、これ以降のバージョンで Python 3.6 はデバッグが出来ないということになります。

拡張機能は install_debugpy.py というファイルで debugpy をダウンロードしているようなので、ソースコードを見ると DEBUGGER_VERSION という変数でバージョンが管理されています。

記事を執筆している時点の最終リリースバージョンの v2022.18.2 を見ると DEBUGGER_VERSION = "1.6.3" になっています。

https://github.com/microsoft/vscode-python/blob/2022.18.2/pythonFiles/install_debugpy.py:

DEBUGGER_VERSION = "1.6.3"  # can also be "latest"

Python 3.6 がデバッグできる最後のバージョン v2022.8.1 を見ると DEBUGGER_VERSION = "1.6.0" になっています。

https://github.com/microsoft/vscode-python/blob/2022.8.1/pythonFiles/install_debugpy.py:

DEBUGGER_VERSION = "1.6.0"  # can also be "latest"

debugpy は v1.6.0 で Python 3.6 のサポートを打ち切ったのにデバッグが出来るというのが気になりますが、サポートを打ち切ったバージョンでも暫くの間は動作するというのは、よくある話なので気にすることは無いでしょう。

Python 拡張機能は古い Python バージョンのデバッグが出来なくなるのか

しかし、この実装方法だと debugpy がサポートを打ち切った Python バージョンは、ms-python.python でデバッグが出来なくなるという懸念があります。

残念ながら、2022年12月時点ではその状況にあります。

とはいえ、 ms-python.python もこの問題は当然認識しているので issue が存在しています。

issue の内容としては実行環境の Python に合わせてダウンロードする debugpy のバージョンを変更する事で、古いバージョンの Python のデバッグもサポートしようという内容です。

この issue がクローズされたときに古い Python を最新の ms-python.python でデバッグ出来るようになっているといいな、という状態です。

5
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
5
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?