🤖

Python + PDM のプロジェクトを VS Code と IntelliJ IDEA で開発する

2023/02/21に公開

PDM を使ってパッケージ管理を行っている Python プロジェクトで VS Code と IntelliJ IDEA を使って開発する機会があったので、設定方法について書く。

環境

  • macOS: Ventura 13.0.1
  • Python: 3.11.2
  • PDM: 2.4.5
  • VS Code: Version: 1.74.2
  • IntelliJ IDEA: IntelliJ IDEA 2022.3.2 (Ultimate Edition)
    • Build #IU-223.8617.56, built on January 26, 2023

Python と PDM のインストール

まずは Python をインストールする。今回は asdf を使ってインストールする。

$ asdf install python 3.11.2

PDM は Homebrew でインストールする。

$ brew install pdm

PDM の初期設定

PDM の初期設定を行う。

$ pdm init

対話の途中で仮想環境を作成するかどうか尋ねられる。

Would you like to create a virtualenv with /Users/hamakou108/.asdf/installs/python/3.11.2/bin/python? [y/n] (y):

y を選択するとカレントディレクトリに virtualenv を使った仮想環境が作成され、 n を選択すると PEP 582 に沿って __pypackages__ ディレクトリが作成される [1]。 PEP 582 は Python 3.12 からサポートされるらしく、2023年3月現在はエコシステムも発展途上であるため、特にこだわりがなければ virtualenv 方式で設定するのをおすすめする。

初期設定が完了すると、次のようにして必要な依存関係をインストールできる。

$ pdm add requests

VS Code の設定

インタープリタの設定

コマンドパレットを開いて Python: Select Interpreter を選択し、 + Enter interpreter path... を選択して Python のパスを設定する。

初期設定時の環境構築方法に応じて次のようにパスを設定する。

  • virtualenv 方式の場合: .venv/bin/python
  • PEP 582 方式の場合: ~/.asdf/installs/python/3.11.2/bin/python3.11
asdf の shims のパス指定について

~/.asdf/installs/python/3.11.2/bin/python3.11asdf which python で取得できる。 python コマンドは ~/.asdf/shims/python にパスが通っている状態だが、上記の代わりにこのパスを設定しようとすると次のようなエラーが発生する。

asdf はコマンドが実行されたディレクトリに適したバージョンのランタイムを自動的に選択するようになっており、 .asdf/shims を経由して .asdf/installs 以下に格納されている適切なバージョンのランタイムを呼び出すような動作になっている。ここもシンボリックリンクになっているので、恐らく VS Code がリンクをランタイム本体まで追跡しきれてないのではと推測している。

外部パッケージの補完

virtualenv 方式の場合はこの時点で補完が効くようになっている。

PEP 582 方式の場合は補完が効かないので、 .vscode/settings.json で次のように設定して __pypackages__ 以下にパッケージが配置されていることを IDE に認識させる。

settings.json
{
  "python.autoComplete.extraPaths": ["__pypackages__/3.11/lib"],
  "python.analysis.extraPaths": ["__pypackages__/3.11/lib"]
}

IntelliJ IDEA の設定

インタープリタの設定

IntelliJ IDEA の Python SDK の設定を行う。

JetBrains の File から Project Structure を開き、表示されたウィンドウの Project メニューから Python SDK を追加するウィンドウをさらに開く。

System Interpreter メニューの Interpreter のパスに VS Code と同様のパスを設定する。1つ前のウィンドウの SDKs を開き、追加した SDK を選択して Classpath が生成されていることを確認する。

Classpath について

Classpath が未生成の状態だと標準ライブラリ等の補完が効かない。 SDK を新たに作ると自動的に生成されるが、既存の SDK のパスを変更しても生成されないような動作になっていることが筆者の環境で確認されたので要注意。

外部パッケージの補完

ここまでの設定では外部パッケージの補完が効かない。 SDK の Classpath に <your_root_path>/__pypackages__/3.11/lib を追加することで補完が効くようになる。

終わりに

また別のコツやハマりどころが見つかれば書き足す予定。

脚注
  1. Working with Virtual Environments - PDM ↩︎

Discussion