疑念は探究の動機であり、探究の唯一の目的は信念の確定である。

数学・論理学・哲学・語学のことを書きたいと思います。どんなことでも何かコメントいただけるとうれしいです。特に、勉学のことで間違いなどあったらご指摘いただけると幸いです。 よろしくお願いします。くりぃむのラジオを聴くこととパワポケ2と日向坂46が人生の唯一の楽しみです。

【VS Code】Import "MODULE" could not be resolved Pylance(reportMissingImports)の対処法

概要
VS Codeで自作モジュールmoduleをインポートしたソースコードを見ると、Import "module" could not be resolved Pylance(reportMissingImports)とエラーが表示される。 これはソースコード自体のエラーではなく、VS Codeのエラーである。 VS Codeの設定を変更することで、この問題は対応できる。その流れを書く。

はじめに

次のようなディレクトリ構成とテストコードを書きました。

blogtest
└── test
    ├── __pycache__
    │   └── module.cpython-37.pyc
    ├── dir1
    │   ├── __pycache__
    │   │   └── module1.cpython-37.pyc
    │   ├── module1.py
    │   └── subdir1
    │       ├── __pycache__
    │       │   └── module2.cpython-37.pyc
    │       └── module2.py
    ├── main.py
    └── module.py

f:id:yoheiwatanabe0606:20210723223446p:plain

# main.py
###
import sys
sys.path.append('./dir1')
sys.path.append('./dir1/subdir1')

import module
import module1
from module2 import func2

print('------------- begin -------------')
module.func()
module1.func01()
module1.func02()
func2()
print('------------- end -------------')

# module.py
###
def func():
    print('-----------------')
    print('Success import func from module!!')

# module1.py
###
def func01():
    print('-----------------')
    print('Success import the func01 from module1!!')

def func02():
    print('-----------------')
    print('Success import the func02 from module1!!')

# module2.py
###
def func2():
    print('-----------------')
    print('Success import func2 from module2!!')

実行結果は期待値通りとなりました。

  • 結果
$ python main.py
------------- begin -------------
-----------------
Success import func from module!!
-----------------
Success import the func01 from module1!!
-----------------
Success import the func02 from module1!!
-----------------
Success import func2 from module2!!
------------- end -------------



しかし、main.pyファイルをVS Codeで見てみると、次のように黄色い線で警告が生じました。 f:id:yoheiwatanabe0606:20210723223449p:plain



そこに矢印を当てるとImport "module1" could not be resolved Pylance(reportMissingImports)というエラーが生じました。 f:id:yoheiwatanabe0606:20210723223456p:plain



このエラーはソースコード自体のものではなく、VS Codeのほうのエラーです。今回はこのエラーの解決方法を説明します。自分用のノートと他の誰かのために。

解決策

  1. コマンドパレットを開く。ショートカットキーはcommand + shift + Pです。または、次のようにして開いてください。 f:id:yoheiwatanabe0606:20210723223502p:plainf:id:yoheiwatanabe0606:20210723223509p:plain

  2. 検索ボックスにsettingsと入力して、Enterを押す。 f:id:yoheiwatanabe0606:20210723223516p:plain

  3. settings.jsonが表示される。 f:id:yoheiwatanabe0606:20210723223522p:plain
    注:
    コマンドパレットにsettingsを入力しても、何も変化がなくsettings.jonが表示されない可能性があります。そのときはなんとかしてsettings.jsonファイルを他の方法で見つけてください。もしかしたら、コマンドパレットの前に設定(Settings)を押して、そこにsettingsと入力してから、再びコマンドパレットでsettingsと入力しなければならないかもしれません(私はその方法でsettings.jsonを見つけました)。

  4. "python.analysis.extraPaths"に自作モジュールの相対パスを設定する。 今回の場合、testディレクトリが一番上ですので、そこからの自作モジュールのパス./dir1./dir1/subdir1を設定します。 f:id:yoheiwatanabe0606:20210723223531p:plain

  5. エラーは解決されます。もしもエラーが解決されなければ、一度VS Codeを再起動してください。ですがおそらく再起動の必要はないと思います。 f:id:yoheiwatanabe0606:20210723223539p:plain

ちなみにですが./dir1だけが記入されてもエラーは残ります。./dir1配下をrecursiveに参照しないため、ちゃんと./dir1/subdir1も書かなければなりません。 f:id:yoheiwatanabe0606:20210723223546p:plain

ディレクトリの場所が変わったとき

これまでの例はtest配下での対応でした。ですが、もしそのひとつ上の階層であるblogtest配下に移ると再びエラーが生じます。ですので、再びsettings.jsonを修正してください。

test blogtest
./dir1 ./test/dir1
./dir1/subdir1 ./test/dir1/subdir1

f:id:yoheiwatanabe0606:20210723223553p:plainf:id:yoheiwatanabe0606:20210723223602p:plain



僕から以上