0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(PATH問題)VSCodeでPythonのパスを解決したプロジェクトを作る

Last updated at Posted at 2025-04-06

はじめに

vscodeで、以下のようなフォルダ構成のプロジェクトを作りたいなと思ったとき、例えばtests/test_codes/配下に配置するテストコードからapp配下をimportして実行するようなテストコードを書こうとしても、appが見つからなくてimortできない、ということに陥る。

-- project root/
 |-- app/     # ★テスト対象
 | |-- app.py
 | |-- ... (いろんなファイルやモジュール)
 | |-- ... (略)
 | `-- ... (略)
 |-- tests/   # テスト関連
 | |-- test_codes/      # テストスクリプト
 | | |-- ... (いろんなテストファイルやモジュール)
 | | |-- ... (略)
 | | `-- ... (略)
 | |-- test_utilities/  # ★テストを便利にするスクリプト用モジュール
 | | |-- ... (いろんなファイルやモジュール)
 | | |-- ... (略)
 | | `-- ... (略)

例えばPyCharmの場合では、Projectのパネルからappディレクトリを右クリックして「Mark Directory as > Sources Root」すればPYTHONPATHが通るので簡単なのだが、同じことをvscodeでも実現して、一つのプロジェクトとして操作しやすくするにはどうしたらいいか?

image.png

方針

appを参照したいプログラムでPython的にsys.path.append()を使ってパスを通すというのは、煩雑だし、不必要な依存関係を作ったりVSCode自体がこれを認識しない可能性がある(Ctrl-左クリックで当該スクリプトに飛べない可能性がある)のでナシの方向で。

tests/配下のスクリプトからapp/にパスが通っている、ということには、自分の使い方の場合(Pluginにはms-python.pythonを、ターミナルにはpwshを使用)、2パターンの問題を解決する必要があるようでした。

  • VSCodeがapp/をPYTHONPATHとして認識する
  • ターミナル(pwsh)がapp/をPYTHONPATHとして認識する

ということで、それぞれに対して設定をしていこうと思います。
また、どのパスをPYTHONPATHとして識別したいか?については、プロジェクトによるので、プロジェクトディレクトリ内で解決するようにできないかな、と考えています。

設定案

ちょっと調べたところ、以下の方法で行けた。もっと良い方法があればアドバイスいただけると嬉しいです。

vscode向け設定: settings.jsonでappをソースディレクトリに設定

以下にsettings.jsonを作成。

-- project root/
 |-- .vscode/
 | `-- settings.json  # 追加
 |-- app/
 | |-- app.py

以下を追記。
("${workspaceFolder}/app"と書いたほうがいいかも。調べ中。)

settings.json
{
    "python.analysis.extraPaths": [".", "./app"],
    "python.autoComplete.extraPaths": [".", "./app"]
}

Terminal(pwsh)向け設定: PYTHONPATHを設定するスクリプトを作って力技でappをソースディレクトリに設定

以下のようなを作成。

-- project root/
 |-- misc/
 | `-- setup.ps1  # 追加
 |-- app/
 | |-- app.py

内容は以下のような感じ。
(以下の例はtestsディレクトリも対象にしてます。Windows向けのセパレータです。)

setup.ps1
$script_dir = Split-Path -Path $MyInvocation.MyCommand.Path -Parent
$project_root_dir = Resolve-Path -Path (Join-Path -Path $script_dir -ChildPath "..")

$app_dir = Join-Path -Path $project_root_dir -ChildPath "app"
$tests_dir = Join-Path -Path $project_root_dir -ChildPath "tests"
$env:PYTHONPATH="${project_root_dir};${app_dir};${tests_dir}"

vscode向け設定:venvへパスを通す

どうしたらいいのか調べていないのだけど、project root/配下でvenvという名前でvenvを作れば勝手にパスが通ってくれる。

Terminal(pwsh)向け設定:venvへパスを通す

面倒だけど、. venv\Scripts\activate.ps1してる。

0
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?