LoginSignup
53
37

More than 3 years have passed since last update.

VSCodeのPylintがimportでうざい!!!!

Posted at

この記事は、エラーの握りつぶしに近い行為を行っています。
一通り問題が解決したら、こちらの記事(https://qiita.com/ysk24ok/items/2711295d83218c699276) も読むべきです。

初めに

VSCodeのPylintがimportでうざい!!!!
っていきなりなんだい。って話ですが、

VSCodeでPythonを書くとき、
自作モジュールを相対インポートしようとすると、必ずと言っていいほどエラーが出ます。

0.環境

グローバル環境(仮想環境を使用せず)で以下のディレクトリ構造です。

~
-Sample
 -main.py
 -__init__.py
 -sub_methods
  -method1.py
  -method2.py
-out.py

それぞれ、以下のコードを持ちます。

main.py
print("main")
from sub_methods import method1
__init__.py
print("__init__")
import os
originaly = os.getcwd
os.chdir(os.path.dirname(os.path.abspath(__file__)))
from . import main
os.chdir = originaly
method1.py
print("method1")
import method2
#from sub_methods import method2
method2.py
print("method2")
out.py
print("out")
from Sample import main

1.unresolved import

この状態でもワーニングがわんさか出ています。
2019-12-14 (2).png

このunresolved import '...'というのは、ワークスペースのルートから一層以上深いと、相対インポートしたときに出てきやがります。

未解決って言われましても…って感じですね。
これを落ち着かせるには、

Ctrl + Shift + P>Settings.jsonを開いて

2019-12-14 (3).png

"python.jediEnabled": false"python.jediEnabled": trueにするか
この項自体を削除します。

2019-12-14 (4).png

2.Unable to import

2019-12-14 (6).png

うるせぇ!俺はmainを直接起動するからカレントディレクトリはSampleなんだよ!!!!

…え?outから起動して
from sub_methods import method1from .sub_methods import method1
に書き換えろって…?
ワークルートとカレントディレクトリをずらすな…?

チッ うっせーよ… 反省してま~す

冗談はさておき、mainのみではなく、method1からmethod2を呼び出すとすると、
どうしてもSampleをカレントディレクトリとしてimportを行うことになります。

2019-12-14 (9).png

method1.py
print("method1")
import method2
#from sub_methods import method2
output
ModuleNotFoundError: No module named 'method2'

変更>

method1.py
print("method1")
#import method2
from sub_methods import method2
output
main
method1
method2

こう書くしかないのに、エラーなんて出されてたら気が散って仕方ありません。
これは、カレントディレクトリ(ここではSample)を、Pylintにライブラリフォルダーと認識させることで抑制することができます。

lib
-os
 -...
-numpy
 -...
...

が、デフォルトのライブラリ認識だとしたらここに

lib
-os
 -...
-numpy
 -...
-main
-sub_methods
 -method1
 -method2

といった感じに認識させれば
from os import pathなどと同じようにfrom sub_methods method2を書いても怒られないはずです。

そこで、ワークルートのフォルダに、以下のファイルを作ります

pylintrc
init-hook="./Sample"

これでlintを再読み込み、またはVSCodeを再起動すると、エラーが表示されなくなったはずです。

まとめ

1."python.jediEnabled": falseを"python.jediEnabled": trueにするか
この項自体を削除します。
2.ワークルートのフォルダにpylintrcを作って、init-hookにmain.pyが含まれるフォルダを与えます。

この記事は、エラーの握りつぶしに近い行為を行っています。
一通り問題が解決したら、こちらの記事(https://qiita.com/ysk24ok/items/2711295d83218c699276) も読むべきです。

53
37
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
53
37