のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

IntelliJでPythonモジュールの補完が効かない(unresolve)ときに確認すること5点

どういう状況か?

IntelliJを使用するとき、当然のことながらライブラリの場所がわからなければそれを使用することはできない。 しかしIDEは賢いので多くの場合デフォルトの設定でサードパーティのライブラリは設定したインタプリタから自動的にモジュールの場所をPYTHONPATHへ追加してくれる。 ただし、自作のモジュールやパッケージは解決できなかったのでその備忘録。

5箇所の設定を確認しよう

設定1:Pythonプラグインは有効になっているか

これは初めてIntelliJを使用する場合のみ起こりうる。 VScode等と同様にIntelliJにも同様にPlugingが存在し、これは[IntelliJ]-> Preference ->Pluginからインストールできる。 インストール直後は再起動が必要(メッセージが出る)なので注意が必要。

IntelliJ - Python Plugin
IntelliJ - Python Plugin

設定2:Project StructureのModule設定

これは言語混合モジュールについてありがちな原因。新規プロジェクトを作成する際やモジュールを追加する際に、IntelliJではProjectSDKを設定し直すことになる。 上記の場合ははモジュール(ディレクトリ)毎に使用するSDKが違うので、モジュール追加後に各モジュールで使用するSDK(インタプリタ)を設定し直す必要がある。 以下の画面で、自分が想定しているインタプリタが設定されていればひとまずは問題ないと言える。

IntelliJ - Project Structure -  moduleSDK
IntelliJ - Project Structure - moduleSDK

設定3:正しいインタプリタが設定されているか

多くの場合、Pythonを利用する人は、venv(virtualenv)かpynevを使用して環境を分離していると思う。 その場合当然のことながらIntelliJでは使っている環境のインタプリタを指定する必要がある。 これらは[File] -> ModuleStructureから確認することができる。

IntelliJ - Python Interpreter
IntelliJ - Python Interpreter

Pythonだけのプロジェクトであれば、ProjectSDKで指定しているものが現在選択されている。 もし設定されてるものがSystemのインタプリタで、開発環境のものでない場合はNew -> Existing Environmentから自分が今使っているインタプリタを設定しよう。 例えばpyenvを使用しているならば、$HOME/.pyenv/versions/${your_pyenv_name}/bin/pythonが設定すべき値となる。

設定4:PreferenceのPython Console

これはおそらくいじる必要性はないものだと思うが、Preferenceでも各Projectの設定がある。

IntelliJ - Preference - Python Console
IntelliJ - Preference - Python Console

ここで青枠で囲っている部分を確認しよう。 これらが入っていれば基本的に困ることは無いと思う。 特に上のadd content roots to PYTHONPATHと下側のStarting Scriptの設定は大事なので確認したほうがよい。

設定5:モジュールのコンテンツルートが設定されているか

これは設定4と関連があるが、IntelliJでは読み込む対象をファイル単位で設定できる。 以下のようにProject Structure -> Moduleから対象のモジュールを選択し、pathタブを選択することで確認が可能である。

IntelliJ - Project Structure - Module Content Root
IntelliJ - Project Structure - Module Content Root

Pythonでは基本的にSoucesExcludeを設定すればよい。前者が読み込み対象で後者は除外である。 除外をするメリットは、読み込み対象を減らすことでIntelliJの動作のパフォーマンスが向上する。規模が大きくなると顕著なので是非設定したい。 設定4と、ここでSourcesを適切に設定すれば、同じパッケージ内の自作モジュールが使えない(ように見える)現象が解決されるだろう。

最後にそれでもだめ場合は…

これらの対処でも修正されない場合、キャッシュを削除してみよう。 そしてそれでも修正されないのであれば、間違いなくなにかのファイルが壊れているので一度IntelliJ再インストールしてみることをおすすめする。(一度このケースに遭遇したことがある。)

参考

pleiades.io

www.jetbrains.com

IntelliJ IDEAハンズオン――基本操作からプロジェクト管理までマスター

IntelliJ IDEAハンズオン――基本操作からプロジェクト管理までマスター