search
LoginSignup
23

More than 1 year has passed since last update.

posted at

updated at

VSCodeワークスペースのルート != PythonエントリーポイントのときのIntelliSense設定

はじめに

Visual Studio Code (以降、VSCode)でPythonプログラムを書くのは便利ですよね。便利にするためにMicrosoftの Python 拡張機能を入れている方も多いと思います。

が、下図のように、スクリプトはちゃんと動くのに、自作のパッケージやモジュールに対して、IntelliSenseがおかしな警告をだしたり、コード補完が効かないことがありませんか?

aaa.png
警告の例: Import "XXXXXX" could not be resolved Pylance (reportMissingImports)

ユーザーないしワークスペースで設定されている、警告だしやコード補完に使われるPython言語サーバーと呼ばれるものの種類によっては、ワークスペースのルートフォルダーと動かしたいPythonスクリプトのエントリーポイントが異なるときに、このようなことが起こります。

このままではせっかくのVSCodeの魅力が半減してしまうので、設定を変更して、警告をなくしコード補完が効くようにします。

以下、上の画像のフォルダー構造を例に説明します。
(想定ケースとして、開発者とは別のユーザーにプログラムをワークスペースフォルダーごと配布するが、ユーザーには RunThis.bat バッチファイルをたたいてもらい、DoNotTouchThisFolder 以下のPythonスクリプトにはさわってほしくないという場合を考えました。)

先人の記事

環境

  • Windows 10 1909 64ビット版
  • Python 3.7.1 (Anaconda)
  • Visual Studio Code 1.48.1
    • Python 拡張機能 v2020.8.103604
    • Pylance 拡張機能 v2020.8.2

設定

Python言語サーバーによって設定値が異なります。

Python言語サーバーがMicrosoftのとき

ユーザー or ワークスペースの settings.json で、 "python.languageServer": "Microsoft" となっているときの話です。Microsoftの Python 拡張機能を入れてポチポチ押していたらこうなっている人もいるかと思います。
このときは、ワークスペースの settings.json に以下を書き加えます。

settings.json
{
    (ほかの設定), 
    "python.autoComplete.extraPaths": [
        "DoNotTouchThisFolder"
    ], 
    (ほかの設定)
}

※ ユーザー or ワークスペースの settings.json で、
"python.jediEnabled": false も加える必要があるかもしれません。

Python言語サーバーがPylanceのとき

ユーザー or ワークスペースの settings.json で、 "python.languageServer": "Pylance" となっているときの話です。Python 拡張機能に加えて、Microsoftが(本記事執筆時点で)最近リリースした拡張機能 Pylance を入れてポチポチ押していたらこうなっている人もいるかと思います。
このときは、ワークスペースの settings.json に以下を書き加えます。

settings.json
{
    (ほかの設定), 
    "python.analysis.extraPaths": [
        "DoNotTouchThisFolder"
    ], 
    (ほかの設定)
}

※ ユーザー or ワークスペースの settings.json で、
"python.jediEnabled": false も加える必要があるかもしれません。

Python言語サーバーがJediのときは、わかりません

結果

bbb.png
😉

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
What you can do with signing up
23