【VSCode】importで未解決の警告(import ~ could not be resolved)が出る問題の対策方法
VisualStudioCodeを使ってPythonのソースを書くときに便利な拡張機能として、Pylanceがリリースされておりますが、ちょっとハマったことがあったので、記録として記事にしておきます。
似たような事象に悩まされている方のお役に立てれば幸いです。
発生した事象
今回作ったワークスペースは、以下のようなディレクトリ構成としました。
${WorkSpaceFolder} └ source ├ module │ └ myModule.py └ main.py
main.py
では、以下のようにmodule
パッケージにあるユーザーモジュールmyModule.py
のhoge
クラスを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さん、本当にありがとうございました!