LoginSignup
3
10

More than 3 years have passed since last update.

Pythonを始めたいけどVSCodeで何を設定すればいいの?

Last updated at Posted at 2020-11-07

はじめに

VSCodeを使っているのですが、Pythonの開発環境を整えるのにイマイチどのプラグイン(拡張機能)を設定すればいいのか、わからないでいました。

自作パッケージ(モジュール)を入れたら "Can't Resolve ~" と怒られたり...

しかし、最近ではどのプラグインを使ってどう設定すればいいか理解できてきました。

過去の僕のようにPythonの開発環境の構築で悩んでいる人へ手助けになれば嬉しいです。

  • 前提
    • Pythonを書いたことが少しでもあるとGood
      • Type Hintって何?って人も一旦わからなくても設定はできます
    • VSCodeをインストールしている
    • zshを使っている
      • 確認方法: echo $SHELL/bin/zsh が表示される
  • 目的 / ゴール
    • MacでPythonのコードが実行できる
    • VSCodeでPython用にプラグインのセットアップができる
    • 名前解決やメソッドの候補、Type Hintによる警告がでる
  • 対象者
    • Mac, Python初心者
    • 突然Pythonで開発をしないといけなくなった人
    • 補完機能を利用して開発したい人
  • サンプルコード

ざっくりこれからやることの流れ

  1. MacでPyenvとVirtualenvを使えるようにする
  2. VSCodeに5つのプラグインを入れる
  3. 各プラグインの設定をする
  4. Pythonで開発してる!!

MacでPyenvを使えるようにする

Pythonの環境設定を行いましょう。AnyenvとPyenvとVirtualenvをインストールします。

これによって、Macに入ってる標準のPython環境を汚さないで済みます。

巷ではPipenvが注目を浴びているようです。今度試してみます)

terminal
$ brew install anyenv
$ anyenv install pyenv
$ echo 'eval "$(anyenv init -)"' >> ~/.zshrc
$ anyenv install --init # これがPYENV_ROOTやPATHの環境変数を通してくれる
$ echo $PYENV_ROOT
~/.anyenv/envs/pyenv
$ brew install pyenv-virtualenv

試しにPythonの仮想環境を作ってみます。

terminal
$ pyenv install 3.8.6  # 3.8.6のPythonをインストール
$ pyenv virtualenv 3.8.6 Sandbox  # 3.8.6を元にSandboxという仮想環境を作る
$ mkdir -p ~/Documents/playground/python && cd "$_"  # サンプルのディレクトリを作成し、そこに移動
$ pyenv local Sandbox  # このディレクトリではSandbox環境のPythonを利用
$ pyenv version  # 現在利用している仮想環境を確認
Sandbox

VSCodeでプラグインを入れて補完を利用する

必要なプラグインは以下の通りです。VSCodeの拡張機能のインストールパレットからインストールしてください。

  • Python
    • ms-python.python
    • Python Language Serverを提供
    • Microsoftが提供する基本的な補完機能のプラグイン。これだけだと弱い
  • MagicPython
    • magicstack.magicpython
    • シンタックスハイライトのプラグイン
  • VisualStudio IntelliCode
    • visualstudioexptteam.vscodeintellicode
    • Microsoftが提供するAIエンジンを搭載した補完プラグイン
  • Pyright
    • ms-pyright.pyright
    • 大本命。Type Hintの恩恵を十分に受けられるプラグイン
    • 変数の型推論を行なったり、Type Hintと違うと警告を出したりする
  • Code Runner
    • formulahendry.code-runner
    • 右上の三角マークから開いているファイルを実行できる

各プラグインの設定

主にPYTHONPATHの設定を行います。自分で作ったパッケージ(パッケージ)をプラグインに伝えることで、補完機能の力を存分に発揮してもらいます。

今回のプロジェクトでは以下のようなフォルダ構成とします。

また、この記事ではpyenvの導入方法で利用した Sandbox という仮想環境で開発を行います。

  1. VSCodeで Command + Shift + P(macOS) / Control + Shift + P (Windows) でコマンドパレットを開きます
  2. Python: Select Interpreter を入力し選択します
  3. 利用するpyenvの環境を選択します(この例では Sandbox

Screen Shot 2020-11-07 at 19.11.18.png

Python Language Server

まずLinter(静的なコードのチェックツール; コード規約に基いてるかなどを確認してくれる)として、flake8というものを導入します。

terminal
pip install flake8

次に .vscode/settings.json に設定を書き込んでいきます。

ここで重要なのは python.envFile という項目と .env ファイルです。Python Language Serverに「どこがPythonプログラムのルートディレクトリ」なのかを教えます。

${workspaceFolder} はVSCodeで開いてるディレクトリを示します。

.vscode/settings.json
{
  "python.linting.pylintEnabled": false,
  "python.linting.flake8Enabled": true,
  "python.linting.enabled": true,
  "python.linting.lintOnSave": true,
  "python.envFile": "${workspaceFolder}/.env"
}

実際のルートディレクトリは .env に書きます。

(※ app/ を src/ という名前にするとPYTHONPATHをセットしなくても独自パッケージを読んでいました。VSCodeはデフォルトで src/ にPATHを通してる?)

.env
PYTHONPATH=app/

デバッグツールでPythonを実行するための設定です。下のスクショのようにブレークポイントやwatchを利用した実行ができるので、ぜひ設定しておきましょう。

Screen Shot 2020-11-07 at 19.47.15.png

.vscode/launch.json
{
  "configurations": [
    {
      "name": "Python: Current File",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal"
    },
    {
      "name": "Python: Main",
      "type": "python",
      "request": "launch",
      "program": "${workspaceRoot}/app/main.py",
      "console": "integratedTerminal"
    }
  ]
}

Pyright

型推論や静的解析が強力です。下の画像では、Pyrightによって第一引数の型が誤っていることを警告してくれています。Python Language Serverだけではこの警告は表示されません。

独自パッケージの名前解決をさせるために、プログラムのルートディレクトリをセットします。

pyrightcofig.json
{
  "executionEnvironments": [
    {
      "root": "app",
      "pythonVersion": "3.8"
    }
  ]
}

Code Runner

現在開いているファイルをワンクリック or Control + Option + N (macOS) で実行してくれます。実行時間も表示されるのでプログラムの最適化にも使えそうです。

Screen Shot 2020-11-07 at 20.04.49.png

「appディレクトリがPython実行のルートディレクトリ($workspaceRoot/app)で、Sandboxの仮想環境($pythonPath)で実行してくれ」という設定をします。

.vscode/settings.json
{
  "code-runner.executorMap": {
    "python": "export PYTHONPATH=$workspaceRoot/app && $pythonPath -B -u $fullFileName"
  }
}

Pythonの開発が爆速になるオススメのプラグイン

Python Docstring Generator

  • njpwerner.autodocstring
  • Java Docのようなクラスや関数のドキュメントのフォーマットを生成してくれます
  • Type Hintを読み取ってくれます

Screen Shot 2020-11-07 at 20.15.37.png

さいごに

PythonのIDEだとPyCharmWingが有名ですが、VSCodeも拡張機能を揃えてしっかりconfigを書けば強力なIDEになり得ると思います。

(至るところにPYTHONPATHを書かないといけないのは面倒ですが...)

MicrosoftからPylanceというプラグインがbetaでリリースされており、さらにVSCodeでの開発が便利になると期待しています。

また、"Done is better than perfect." の精神で書き上げたので、わかりにくい部分はぜひご指摘をお願いします。また、他にオススメの設定などありましたらコメントで教えていただけるとありがたいです。

お読みいただきありがとうございました。お役に立てたら LGTM いただけると励みになります。

3
10
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
3
10