この記事は、エラーの握りつぶしに近い行為を行っています。
一通り問題が解決したら、こちらの記事(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
それぞれ、以下のコードを持ちます。
print("main")
from sub_methods import method1
print("__init__")
import os
originaly = os.getcwd
os.chdir(os.path.dirname(os.path.abspath(__file__)))
from . import main
os.chdir = originaly
print("method1")
import method2
#from sub_methods import method2
print("method2")
print("out")
from Sample import main
#1.unresolved import
この状態でもワーニングがわんさか出ています。
このunresolved import '...'
というのは、ワークスペースのルートから一層以上深いと、相対インポートしたときに出てきやがります。
未解決って言われましても…って感じですね。
これを落ち着かせるには、
Ctrl + Shift + P
>Settings.json
を開いて
"python.jediEnabled": false
を"python.jediEnabled": true
にするか
この項自体を削除します。
#2.Unable to import
うるせぇ!俺はmainを直接起動するからカレントディレクトリはSample
なんだよ!!!!
…え?outから起動して
from sub_methods import method1
をfrom .sub_methods import method1
に書き換えろって…?
ワークルートとカレントディレクトリをずらすな…?
チッ うっせーよ… 反省してま~す
冗談はさておき、mainのみではなく、method1からmethod2を呼び出すとすると、
どうしてもSample
をカレントディレクトリとしてimportを行うことになります。
print("method1")
import method2
#from sub_methods import method2
ModuleNotFoundError: No module named 'method2'
変更>
print("method1")
#import method2
from sub_methods import method2
main
method1
method2
こう書くしかないのに、エラーなんて出されてたら気が散って仕方ありません。
これは、カレントディレクトリ(ここではSample
)を、Pylintにライブラリフォルダーと認識させることで抑制することができます。
lib
-os
-...
-numpy
-...
...
が、デフォルトのライブラリ認識だとしたらここに
lib
-os
-...
-numpy
-...
-main
-sub_methods
-method1
-method2
といった感じに認識させれば
from os import path
などと同じようにfrom sub_methods method2
を書いても怒られないはずです。
そこで、ワークルートのフォルダに、以下のファイルを作ります
init-hook="./Sample"
これでlintを再読み込み、またはVSCodeを再起動すると、エラーが表示されなくなったはずです。
#まとめ
1."python.jediEnabled": falseを"python.jediEnabled": trueにするか
この項自体を削除します。
2.ワークルートのフォルダにpylintrcを作って、init-hookにmain.pyが含まれるフォルダを与えます。
この記事は、エラーの握りつぶしに近い行為を行っています。
一通り問題が解決したら、こちらの記事(https://qiita.com/ysk24ok/items/2711295d83218c699276) も読むべきです。