aburi6800のブログ

コンピュータのプログラミング、ゲームに関するニッチな情報を書いていくブログです。

【VSCode】importで未解決の警告(import ~ could not be resolved)が出る問題の対策方法

 VisualStudioCodeを使ってPythonのソースを書くときに便利な拡張機能として、Pylanceがリリースされておりますが、ちょっとハマったことがあったので、記録として記事にしておきます。
 似たような事象に悩まされている方のお役に立てれば幸いです。
 

発生した事象

 今回作ったワークスペースは、以下のようなディレクトリ構成としました。

${WorkSpaceFolder}
└ source
 ├ module
 │ └ myModule.py
 └ main.py

 
 main.pyでは、以下のようにmoduleパッケージにあるユーザーモジュールmyModule.pyhogeクラスをimportしようとしています。

from .module.myModule import hoge

 
 すると、以下の警告が発生しました。

ImportError: attempted relative import with no known parent package

 
 なお、警告が出るだけで、実行は可能な状態です。(Python上では問題ない)
 

対処

 以下の手順で、先ほどの警告が出なくなるはずです。
(設定値のフォルダ名は合わせて適宜変更、複数ある場合はカンマで続けて記載していく)
 
① ワークスペースのルートディレクトリにある.vscode/ディレクトリにsettings.jsonファイルを作成し、以下の内容を記述する。

{
    "python.analysis.extraPaths": [
        "./source"
    ]
}

VSCodeの設定から拡張機能のPylanceを選択し、ワークスペースタブのPython > Analsys: Extra Pathsの「項目の追加」を押して、設定値を記載しても同じです。
※パスはワークスペースディレクトリからの相対パスで指定してください。${WorkSpaceFolder}/sourceのように絶対パスで指定するとうまくいかないようです。
 
② VSCodeを再起動する。
 
③ import文を以下のように修正する。

from module.myModule import hoge

※パッケージの先頭にあった「.」(ピリオド)を削除する
 

原因

 Pylanceでは、通常はワークスペースのルートディレクトリ(VSCodeで開いたディレクトリ)をユーザーモジュールのインポートのメインルートとして扱います。
 それ以外のディレクトリをユーザーモジュールのメインルートとした場合は、Pylanceは見つけることができないため、警告が出ていたということでした。
 なので、以下のようなディレクトリ構成だった場合は、特に対応する必要はなかったわけです。

${WorkSpaceFolder}
├ module
│ └ myModule.py
└ main.py

 

さいごに

 この事象の説明と対応は、以下のURL(PylanceのGitHubリポジトリにある、Trubleshootingドキュメント)にも記載がありますので、参考に貼っておきます。
https://github.com/microsoft/pylance-release/blob/master/TROUBLESHOOTING.md#unresolved-import-warnings  
 また、調査に協力いただいたHiromasaさん、本当にありがとうございました!