#概要と結論
VSCodeで標準のPython拡張を用いて、Pythonの開発を行っていたときにデバッグを実行しようとすると、ブレークポイントで止まらない事象に遭遇してしまいました。
仮想環境でデバッグを実行した際に上記事象が発生するようで、ネットで解決法を探ると、フォルダの階層が深いとブレークポイントで止まらなくなるとの記事を見つけたので、実際どうなのかPython素人ながら検証しました。
結論から言うと、フォルダの階層は関係なさそうで、実行環境としてある仮想環境を指定した場合、その仮想環境配下にある.pyファイルについてデバッグが動かなくなるようでした。
#検証内容
pythonPath
を実環境と仮想環境切り替えて、デバッグ実行を行います。
launch.json
にて、stopOfEntry
をtrueに変更し、デバッグ実行したときに先頭行で止まるかどうかでデバッグ成功失敗を判断します。
今回は第1階層~第4階層まで作成してどのような組み合わせでデバッグできないかを確かめます。(ただし、仮想環境の第1階層は作れないので割愛します)
#検証環境
###バージョン
Pythonバージョン:3.6
VSCodeバージョン:1.35.1
###フォルダ構成
C:
┗ vstest_d1_exe\ (プロジェクトフォルダ)
┣ .vscode\
┃ ┣ launch.json
┃ ┗ settings.json
┣ fibTest.py
┣ d2\
┃ ┣ fiTest.py
┃ ┣ d3\
┃ ┃ ┣ fibTest.py
┃ ┃ ┣ d4\
┃ ┃ ┃ ┗ fibTest.py
┃ ┃ ┗ dv4\
┃ ┃ ┗ fibTest.py
┃ ┗ vd3\
┃ ┗ fibTest.py
┗ vd2\
┗ fibTest.py
紫色はフォルダです。
各フォルダに書かれた数字は階層です。
d2なら、第2階層を表します。
vd2なら、第2階層の仮想環境を表します。(仮想環境のScriptsフォルダ等は割愛します)
ちなみに.pyファイルが「fibtest.py」という名前なのは、以下のサイトでPythonを勉強中にこの事象に遭遇したためです。
@IT VS CodeでPythonコードのデバッグも楽々!!
###実行環境のPath (pythonPath)
- 実環境1 :
"python.pythonPath": "C:\\Python36\\python.exe"
- 仮想環境2:
"python.pythonPath": "vd2\\Scripts\\python.exe"
- 仮想環境3:
"python.pythonPath": "d2\\vd3\\Scripts\\python.exe"
- 仮想環境4:
"python.pythonPath": "d2\\d3\\vd4\\Scripts\\python.exe"
###jsonファイル
settings.json
{
"python.pythonPath": "実行環境により変化"
}
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"pythonPath": "${config:python.pythonPath}",
"stopOnEntry": true,
}
]
}
#検証結果
実行環境 | d1 | d2 | d3 | d4 | vd2 | vd3 | vd4 |
---|---|---|---|---|---|---|---|
実環境 | OK | OK | OK | OK | OK | OK | OK |
vd2 | OK | OK | OK | OK | NG | OK | OK |
vd3 | OK | OK | OK | OK | OK | NG | OK |
vd4 | OK | OK | OK | OK | OK | OK | NG |
各行が実行環境、列が各階層の.pyファイルのデバッグ成功結果です。 | |||||||
OKはデバッグが働き先頭行で止まった組み合わせです。 | |||||||
NGはデバックが働かなくて止まらずに全て実行されてしまった組み合わせです。念のためStopOfEntryだけが効かない可能性も考え、必ず実行される適当な位置にブレークポイントを仕掛けましたが、同様に止まりませんでした。 |
結果として、実行できなかったのは
「実行環境を仮想環境とした場合の、その仮想環境配下の.pyファイル」ということになりました。
具体的に言うと、実行環境として、vd2のパス
"python.pythonPath": "vd2\\Scripts\\python.exe"
を指定した場合は、
C:\VSTest_d1_exe\vd2
配下にある.pyファイルはデバッグ実行できないということになります。ちなみに、
C:\VSTest_d1_exe\vd2
の配下にフォルダを作り、その中に.pyファイルを置いても、Scriptsフォルダ配下に.pyファイルを置いても同様にデバッグできませんでした。
Python初心者なので、仮想環境配下の.pyファイルの置き場所はどこがベターなのかよいかわかりませんが、VSCodeを使って仮想環境でデバッグしたい場合は、その仮想環境配下にpyファイルを作成しないほうが無難のようです。