10
10

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 5 years have passed since last update.

VSCodeでPython仮想環境のデバッグ実行時にブレークポイントで止まらない問題

Posted at

#概要と結論
 VSCodeで標準のPython拡張を用いて、Pythonの開発を行っていたときにデバッグを実行しようとすると、ブレークポイントで止まらない事象に遭遇してしまいました。

 仮想環境でデバッグを実行した際に上記事象が発生するようで、ネットで解決法を探ると、フォルダの階層が深いとブレークポイントで止まらなくなるとの記事を見つけたので、実際どうなのかPython素人ながら検証しました。

 結論から言うと、フォルダの階層は関係なさそうで、実行環境としてある仮想環境を指定した場合、その仮想環境配下にある.pyファイルについてデバッグが動かなくなるようでした。
#検証内容
 pythonPathを実環境と仮想環境切り替えて、デバッグ実行を行います。
 launch.jsonにて、stopOfEntryをtrueに変更し、デバッグ実行したときに先頭行で止まるかどうかでデバッグ成功失敗を判断します。
 今回は第1階層~第4階層まで作成してどのような組み合わせでデバッグできないかを確かめます。(ただし、仮想環境の第1階層は作れないので割愛します)
#検証環境
###バージョン
 Pythonバージョン:3.6
 VSCodeバージョン:1.35.1
VSCodeバージョン.png
###フォルダ構成

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

settings.json
{
    "python.pythonPath": "実行環境により変化"
}
launch.json
{
    // 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ファイルを作成しないほうが無難のようです。

10
10
4

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
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?