[備忘録] VisualStudioCode で Python の環境構築 2021


はじめに

Visual Studio Code 上で Python の開発環境を構築したため、備忘録として残しておきます。

環境

手元ではWSL2を使って動作確認しています。
他の環境でもパス等の設定を変えれば同等の環境が構築できるはずです。

  • WSL2 (Ubuntu 20.04 LTS) on Windows 10 Pro

前提

Visual Studio Code と Python の処理系は導入済みであるとします。

導入するもの

Python

まずは、拡張機能を入れていきます。
拡張機能のアイコンから Python と検索し、インストールします。

インストール後、処理系のパスを設定します。
コマンドパレット ( Alt + X ) より Preference: Open Settings (JSON) を選択し、JSON の編集画面を開き、以下を追記します。今回設定した、Ubuntu 20.04 LTS だと以下になります。

"python.pythonPath": "usr/bin/python3"

※一部の項目は、メニューバーのファイル > ユーザー設定 > 設定から GUI でも設定できます。

Pylance

先程と同様に、Pylance と検索し、インストールします。
将来的には、上記の Python 拡張機能を置き換えていくもののようです。
Announcing Pylance: Fast, feature-rich language support for Python in Visual Studio Code

インストール後、使用する言語サーバとして、Pylance を設定します。
先程と同様に、JSON の編集画面を開き、以下を追記します。

"python.languageServer": "Pylance"

flake8

Linter を導入します。ここでは、flake8 を使用します。
VSCodeのPython開発環境でpylintの代わりにflake8を導入し自動整形を設定する

まずは、コンソールから pip で flake8 をインストールします。

$ pip install flake8

設定の GUI より、Python > Linting: Enabled のチェックが入っていることを確認します。
デフォルトの pylint を無効にし、flake8 を有効にするため、以下の項目を JSON に追記します。

"python.linting.pylintEnabled": false
"python.linting.flake8Enabled": true

また、後述のフォーマッタである black と linter のルールを合わせるため、以下も追記します。
The Black code style

"python.linting.flake8Args": [
    "--max-line-length",
    "88",
    "--ignore=E203,W503,W504"
]

black

Formatter を導入します。ここでは、black を使用しますがお好みのもので良いと思います。
Black: Python のソースコードを自動整形するツール

まずは、pip からインストールします。

$ pip install black

また、JSON に以下の項目を追記して、black を選択します。

"python.formatting.provider": "black"

エディタで保存した際、自動でフォーマッタがかかるよう、以下も追記します。

"editor.formatOnSave": true

Python でのみ有効にしたい際は、以下のように記述します。

"[python]": {
  "editor.formatOnSave": true
}

isort

import 文をソートしてくれます。特に指定をしない限り、拡張機能内部のものを使用するそうです。
ただし、保存した際に自動でソートされるよう、以下の設定を記述します。

"editor.codeActionsOnSave": {
    "source.organizeImports": true
}

mypy

型アノテーションに対して、静的解析を行います。
mypyやっていくぞ

例によって、pip でインストールします。

$ pip install mypy

JSON に設定を記述して、mypy を有効にします。

"python.linting.mypyEnabled": true

おわりに

これで、コーディングに集中できるようになりました。

最後に、インストールコマンドと、設定ファイルの JSON をまとめておきます。

pip install flake8 black mypy
setting.json
{
    // Editor
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
        "source.organizeImports": true
    },
    // Python
    "python.pythonPath": "/usr/bin/python3",
    "python.languageServer": "Pylance",
    "python.linting.pylintEnabled": false,
    "python.linting.flake8Enabled": true,
    "python.linting.flake8Args": [
        "--max-line-length",
        "88",
        "--ignore=E203,W503,W504"
    ],
    "python.linting.mypyEnabled": true,
    "python.formatting.provider": "black",
}