概要
以下、自分用のメモです。
自分の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設定するのかなって調べたら、以下を発見。
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" } } ] }
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場