5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python自作パッケージのimport時にVSCodeで警告が出る問題の解決

Posted at

概要

  • VSCodeでPythonのソースコードを書いている際、自作のパッケージを使うことはよくある。
  • しかし、自作パッケージ(あるいは自作モジュール、自作ライブラリ)のimportはVSCodeにおいては適切な設定をしなければ警告対象となる。
  • 警告がでたままにしておくと、バグの作りこみの確率が上がる可能性があるため、消したい。
  • そのため、".vscode/settings.json"の"python.analysis.extraPaths"に絶対パスで指定する。

前提

  • OS: Windows 11 Pro(バージョン:21H2/OSビルド22000.856)
  • VSCode: 1.70.1 (user setup)
  • Python: 3.10.3

背景

  • Pythonでコーディングする際、別のアプリでも再利用したい機能はいくつもある。
  • それらの機能を実現するためのソースコードはパッケージとして切り出し、再利用したい。
  • Pythonではソースコードの再利用するためには、別ファイルでパッケージとしてコーディングし、importする。
  • なお、カレントディレクトリにパッケージを収めたファイルがあってもVSCodeはそれを認識できない。
  • パッケージを見つけられないVSCodeはimport可能なパッケージがないと警告をあげる。
  • この警告を消したい。

現象

  • 以下の構造で、以下のファイルがある場合のVSCodeの画面を示す。
  • 「利用できるクイックフィックスはありません」と表示されるが、実際には`python main.py'で実行可能である。
    VSCodeの画面(警告あり)

発生した状況

  • 以下がディレクトリ構造とファイル内容
root/
  ├ common/
  │    └ mypackage.py
  └ main.py

  • 実行するPythonスクリプト
main.py
import common.mypackage as mypkg

mypkg.MYHEY().hey()
  • パッケージを記載するファイル
mypackage.py
class MYHEY:
    msg=None

    def __init__(self,msg='Hey!'):
        self.msg = msg

    def __del__(self):
        pass

    def hey(self):
        print(self.msg)

解決方法

  • ".vscode/settings.json"の"python.analysis.extraPaths"に絶対パスで指定する。
  • 今回は、WSL2上のファイルをWin側でVSCodeを用いて編集している場合を考える
settings.json
{
    "python.analysis.extraPaths": [
        "\\\\wsl.localhost\\<OS名>\\<実行するカレントディレクトリ>"
    ]
}
  • 以下のように警告が消える
    VSCodeの画面(警告なし)

おわりに

  • 警告自体は出ていても実行は可能だが、より致命的な問題を見落とす原因になると考えている。
  • 何よりもすっきりとしている方が気持ち良いのではないだろうか。
  • Enjoy VSCode!

参考サイト

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?