親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。育児のイロハという育児サイト(https://ikujip.jp)の開発も行っているため、その開発で使用されている技術についても掲載しています。

pydevで発生するUnresolved import errorの解決方法

unresolved import error

EclipseのpydevでPythonを使った開発をしている時のみで発生する事象になります。
「from 〜 import 〜」の箇所などで「unresolved import error」とエラー表示がされることがあります。
起動や動作自体は問題ないのですが、なぜかエラーの表記が。。。
開発時に赤色の波線でエラー表記が出続けていると、開発に集中できませんよね。

最初の頃なんかはどうしてエラーが出ているのか困った人は多いのではないでしょうか。
モジュールはちゃんとあるし、Pythonの構文としても間違っていないし、pythonpathもちゃんと通っているし。。。

放っておいてもまぁ問題はないのですが、本当に解決しなければいけないエラーとの区別がつきずらく、ちょっと厄介です。

エラーの原因

これは使用したいパッケージモジュールが指定しているpythonpath直下ではなく、その入れ子の中に存在している場合に発生するようです。
Eclipseがそこまで対応していないのかpydevのバグなのかわかりませんが、とりあえずEclipseとpydevを使った場合の特有のエラーのようです。

解決方法1 「@UnresolvedImport」というコメントを挿入する

プロジェクトみんながEclipseを使用しているようなプロジェクトではこの方法が手っ取り早いと思います。
エラーが発生している行に「@UnresolvedImport」というコメントを挿入するだけで解決してしまうのです。

具体的には、エラーが発生している行にカーソルをおき、「Ctrl + 1」を押下(Macの場合はcommand + 1)。
すると選択リストが出てくるので、そこでUnresolvedImportを選択すれば、「@UnresolvedImport」というコメントが挿入されてエラー表示は消えます。

アノテーションの意味としてはインポートの問題を解決しません、と宣言しているので、Eclipseもじゃあもうエラーが出さなくていいかという感じになっているんですね。

解決方法2 importしたいパッケージモジュールを全部pythonpathに設定する

エラーの原因が入れ子になっているパッケージモジュールにpythonpathが通っていないだけなので、Eclipseの設定で全てのパッケージモジュールにpythonpathを通してしまえば解決できます。
ただ毎度毎度この設定をするのは非常に面倒です。
pythonpathを通したいモジュールのディレクトリの場所を探して指定して。。。とやってくのは大変ですよね。

まとめ

「@UnresolvedImport」のコメントを入れる方法が一番手っ取り早いと思いますが、Eclipse以外の他のIDEを使っている人からするとこのコメントは何だろう?と疑問に思ってしまいますね。
また、他のIDEで作成した人はこのコメントを入れないと思うので、Eclipseユーザは他の人が作成したプログラムにもいちいちこのコメントを入れなければいけないのは面倒かと思います。
早く対応して欲しいエラーですね。

Pythonプロフェッショナルプログラミング 第3版

Pythonプロフェッショナルプログラミング 第3版