当サイトは、アフィリエイト広告を利用しています
vscodeでpythonの開発を行う場合のPYTHONPATHをvscodeに認識させる方法と
その影響範囲についてまとめる。
PYTHONPATHについては下記記事で書いている
vscodeにPYTHONPATHを読み込ませることでVSCodeの補完・解析・拡張機能にPYTHONPATHを反映させることができる
具体的には
などがある。
vscodeにPYTHONPATHを読み込ませるためには
が必要になる。
また上記3で書いたように.envファイルの格納位置によって少し設定が変わるので
それぞれ解説する。
.envをプロジェクト直下に置く場合の手順。
プロジェクト構成としては下記のようなイメージ
my-project/├── app/│ └── main.py├── tests/│ └── test_main.py└── .env
各ファイルは下記にする
# app/main.pydef greet(name: str) -> str:return f"Hello, {name}!"
# tests/test_main.pyimport unittest# from app.main import greetfrom main import greet # PYTHONPATHが通っていればこれでOKclass TestMain(unittest.TestCase):def test_greet(self):self.assertEqual(greet("World"), "Hello, World!")if __name__ == "__main__":unittest.main()
vscodeでpython拡張機能をインストールする
拡張機能があればプロジェクトルートに置いた.envは自動で読み込んでくれる
※vscode本体だけでは.envを認識しない。
PYTHONPATH=./app
.envをプロジェクト直下ではなく、仮に.vscode/フォルダに置く場合の手順
プロジェクト構成としては下記のようなイメージ
my-project/├── app/│ └── main.py├── tests/│ └── test_main.py└── .vscode/├── .env└── settings.json
各ファイルは下記にする
# app/main.pydef greet(name: str) -> str:return f"Hello, {name}!"
# tests/test_main.pyimport unittest# from app.main import greetfrom main import greet # PYTHONPATHが通っていればこれでOKclass TestMain(unittest.TestCase):def test_greet(self):self.assertEqual(greet("World"), "Hello, World!")if __name__ == "__main__":unittest.main()
vscodeでpython拡張機能をインストールする
.envファイルがプロジェクトルートにないので、これだけではimportエラーが発生する
PYTHONPATH=./app
{"python.envFile": "${workspaceFolder}/.vscode/.env",}
vscodeで
を使った場合、vscodeが内部的にpythonコマンドを直接呼び出しているため
.envは読み込まれない。
※vscodeのターミナルで実行した場合も同様。
vscode上で実行したいなら、launch.jsonを作って実行するしかない。
{"version": "0.2.0","configurations": [{"name": "Run main.py with PYTHONPATH","type": "debugpy","request": "launch","program": "${workspaceFolder}/app/main.py","envFile": "${workspaceFolder}/.env","console": "integratedTerminal"}]}
「VSCodeが.envを読み込む」
→ VSCodeの補完・解析・拡張機能のため
「実行時に.envを読み込む」
→ Pythonの実行環境に環境変数を渡すため
のようにvscodeに.envを認識させてもvscode上で使えるようになるだけであって
実行時に.envを読んでいるわけではない。
この2つはまったく別のレイヤーの話になっているので注意する
ちなみにpytestをvscodeの拡張機能を使ってvscode上で行う場合は、vscode上から実行するので
PYTHONPATHは認識される。
pytestをvscodeで実行する方法については下記記事でまとめている