いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Pythonメモ-89 (vscodeでパッケージ形式になってるpythonファイルをデバッグ起動)(PYTHONPATH, launch.json)

概要

以下、自分用のメモです。

自分のpythonの知識が足りていないだけなのですが、vscode で 以下のような構造

+---.vscode
|       launch.json
|
+---lib
|       versions.py
|       __init__.py
|
\---pkg1
        main1.py
        __init__.py

があって、main1.pyが例えば以下のように lib の下のモジュール呼び出しをしてる

from lib import versions

if __name__ == '__main__':
    v = versions.get_py_version()
    assert isinstance(v, str)
    print(v)

自分の場合いつもはコマンドラインで

$ python -m pkg1.main1

ってやって起動したりしてます。(というか普段はPyCharm上なので、三角ボタン押してるだけ)

で、vscodeで、F5でデバッグ起動とかしてみたいなーって思って、押して見ると launch.json が生成されて

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File (Integrated Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
    ]
}

って定義が出来るのですが、これで実行すると ModuleNotFound のエラーとなる。sys.pathが通っていない。

当然ながら単独ファイルの場合は何も問題はないんですけどね。

コマンドラインでやる場合も

$ python pkg1\main1.py

で同じエラー。なので、いつもは

$ (set PYTHONPATH=.) && python pkg1/main1.py

って感じで、ファイル直指定の場合はやってます。

vscodeさんの場合、他にもモジュール指定できる構成定義も出力されるのですが、毎回 launch.json 保存しなおして 実行するのが面倒くさい。

どうやって、PYTHONPATH設定するのかなって調べたら、以下を発見。

stackoverflow.com

envでPYTHONPATH設定したらいいことがわかり、最終的に以下のようにしたらうまく起動するように出来ました。ついでにバイトコードも出力しないように設定。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File (Integrated Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "pythonPath": "${config:python.pythonPath}",
            "cwd": "${workspaceFolder}",
            "env": {
                "PYTHONPATH": "${workspaceFolder}",
                "PYTHONDONTWRITEBYTECODE": "1"
            }
        }
    ]
}

過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com