はじめに
Visual Studio Code (以降、VSCode)でPythonプログラムを書くのは便利ですよね。便利にするためにMicrosoftの Python
拡張機能を入れている方も多いと思います。
が、下図のように、スクリプトはちゃんと動くのに、自作のパッケージやモジュールに対して、IntelliSenseがおかしな警告をだしたり、コード補完が効かないことがありませんか?
警告の例: Import "XXXXXX" could not be resolved Pylance (reportMissingImports)
ユーザーないしワークスペースで設定されている、警告だしやコード補完に使われるPython言語サーバーと呼ばれるものの種類によっては、ワークスペースのルートフォルダーと動かしたいPythonスクリプトのエントリーポイントが異なるときに、このようなことが起こります。
このままではせっかくのVSCodeの魅力が半減してしまうので、設定を変更して、警告をなくしコード補完が効くようにします。
以下、上の画像のフォルダー構造を例に説明します。
(想定ケースとして、開発者とは別のユーザーにプログラムをワークスペースフォルダーごと配布するが、ユーザーには RunThis.bat
バッチファイルをたたいてもらい、DoNotTouchThisFolder
以下のPythonスクリプトにはさわってほしくないという場合を考えました。)
先人の記事
-
VSCode・インテリセンスが効かない?を解消
- 基本的にはこちらをご覧いただければ解決しますが、以下では、Python言語サーバーが
Pylance
のときにも触れます。
- 基本的にはこちらをご覧いただければ解決しますが、以下では、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
に以下を書き加えます。
{
(ほかの設定),
"python.autoComplete.extraPaths": [
"DoNotTouchThisFolder"
],
(ほかの設定)
}
※ ユーザー or ワークスペースの settings.json
で、
"python.jediEnabled": false
も加える必要があるかもしれません。
Python言語サーバーがPylanceのとき
ユーザー or ワークスペースの settings.json
で、 "python.languageServer": "Pylance"
となっているときの話です。Python
拡張機能に加えて、Microsoftが(本記事執筆時点で)最近リリースした拡張機能 Pylance
を入れてポチポチ押していたらこうなっている人もいるかと思います。
このときは、ワークスペースの settings.json
に以下を書き加えます。
{
(ほかの設定),
"python.analysis.extraPaths": [
"DoNotTouchThisFolder"
],
(ほかの設定)
}
※ ユーザー or ワークスペースの settings.json
で、
"python.jediEnabled": false
も加える必要があるかもしれません。