VSCodeでなぜか「unresolved import」が出る時の対処法

python

こんにちは。趣味グラマのNobu(@nm_aru)です。

最近Pythonを触り始めています。
今日はVSCodeを使っている時に、なぜか「unresolved import」が出た時の対処法をご紹介します。

Pathは合っているはずなのに「unresolved import」が出る

python3 -m venv testPrj

普通に上記のコマンドを打つと、下記のディレクトリが出来上がります。

testPrj
 ├── bin
 ├── include
 ├── lib
 └── pyvenv.cfg

ここに、srcディレクトリとmain.pyを置くと、下記のようになります。

testPrj
 ├── bin
 ├── include
 ├── lib
 ├── pyvenv.cfg
 └── src
     └── main.py

更にimportしたいモジュールを格納するディレクトリとモジュールファイルを置くと、下記のようになります。

testPrj
 ├── bin
 ├── include
 ├── lib
 ├── pyvenv.cfg
 └── src
     ├── modules
     │   └── somemodule.py
     └── main.py

この状況でmain.pyからsomemodule.pyをインポートする場合

from modules import somemodule

と書きますよね?(多分)
しかし、こう書くと「modules」の部分に対して

unresolved import 'modules'Python(unresolved-import)

というエラー(ワーニング?)が表示されます。

ところが、このままmain.pyを実行してみると、somemoduleを正常に読み込んだ上で実行も正常に完了します。

何でだ?という事で、早速Google先生に聞く。

.envにPYTHONPATHの設定をすればOK

例によってGitHubのissueに答えがありました。

Python unresolved import issue · Issue #3840 · microsoft/vscode-python
We believe the issue has been resolved, if not, please do open a new issue. Locking this issue, to ensure we create a ne...

解決法としては

  1. VSCodeのワークスペース直下に.envを追加
  2. .env内にPYTHONPATHとして「src」を指定
  3. VSCodeのsettings.jsonに.envのパスを指定

の3つをやれば良いとの事。

.envの中身

PYTHONPATH=src

settings.jsonへの追加

{
 〜省略〜
  "python.envFile": "${workspaceFolder}/.env"
 〜省略〜
}

確かにこれで直ったのですが、私の場合は3のsettings.jsonへの追加をしなくても、.envが認識されました。

まとめ

こういう環境周りのところは正直面倒だけど、あっさり解決できて良かった\(^o^)/

コメント

  1. 匿名 より:

    私も同じ内容で悩んでおりましたが、.envファイルすることで解決できました。

    ありがとうございます。助かりました。

  2. 匿名 より:

    これってOSはmacですか?

    > settings.jsonへの追加をしなくても

    これは多分VSCodeのデフォルト設定がそうなってたのだと思います!

    • mrym より:

      はい、OSはmacです。

      > これは多分VSCodeのデフォルト設定がそうなってたのだと思います!

      そういう事だったのですね!
      教えていただきありがとうございます!

タイトルとURLをコピーしました