結論
先に結論を書きます。
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.python
で Python 3.6 のデバッグをしたい場合は拡張機能のバージョンを v2022.8.1 に戻す必要があります。
Visual Studio Code の拡張機能画面から過去のバージョンに戻すためには「アンインストール」のリストから「別のバージョンをインストール」を選択、その後に表示されるバージョン検索バーに 2022.8.1
を入力して該当のバージョンの拡張機能をインストールします。
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秒弱表示されたかと思うと、すぐに消えてしまうという状況でした。
この時に 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 などのデバッグ構成との間に気になる差分がありませんでした。
{
"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
でデバッグ出来るようになっているといいな、という状態です。