はじめに
VSCodeを使っているのですが、Pythonの開発環境を整えるのにイマイチどのプラグイン(拡張機能)を設定すればいいのか、わからないでいました。
自作パッケージ(モジュール)を入れたら "Can't Resolve ~"
と怒られたり...
しかし、最近ではどのプラグインを使ってどう設定すればいいか理解できてきました。
過去の僕のようにPythonの開発環境の構築で悩んでいる人へ手助けになれば嬉しいです。
- 前提
- Pythonを書いたことが少しでもあるとGood
- Type Hintって何?って人も一旦わからなくても設定はできます
- VSCodeをインストールしている
- zshを使っている
- 確認方法:
echo $SHELL
→/bin/zsh
が表示される
- 確認方法:
- Pythonを書いたことが少しでもあるとGood
- 目的 / ゴール
- MacでPythonのコードが実行できる
- VSCodeでPython用にプラグインのセットアップができる
- 名前解決やメソッドの候補、Type Hintによる警告がでる
- 対象者
- Mac, Python初心者
- 突然Pythonで開発をしないといけなくなった人
- 補完機能を利用して開発したい人
- サンプルコード
ざっくりこれからやることの流れ
- MacでPyenvとVirtualenvを使えるようにする
- VSCodeに5つのプラグインを入れる
- 各プラグインの設定をする
- Pythonで開発してる!!
MacでPyenvを使えるようにする
Pythonの環境設定を行いましょう。AnyenvとPyenvとVirtualenvをインストールします。
これによって、Macに入ってる標準のPython環境を汚さないで済みます。
(巷ではPipenvが注目を浴びているようです。今度試してみます)
$ 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の仮想環境を作ってみます。
$ 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
という仮想環境で開発を行います。
- VSCodeで Command + Shift + P(macOS) / Control + Shift + P (Windows) でコマンドパレットを開きます
-
Python: Select Interpreter
を入力し選択します - 利用するpyenvの環境を選択します(この例では
Sandbox
)
Python Language Server
まずLinter(静的なコードのチェックツール; コード規約に基いてるかなどを確認してくれる)として、flake8というものを導入します。
pip install flake8
次に .vscode/settings.json
に設定を書き込んでいきます。
ここで重要なのは python.envFile
という項目と .env
ファイルです。Python Language Serverに「どこがPythonプログラムのルートディレクトリ」なのかを教えます。
${workspaceFolder}
はVSCodeで開いてるディレクトリを示します。
{
"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を通してる?)
PYTHONPATH=app/
デバッグツールでPythonを実行するための設定です。下のスクショのようにブレークポイントやwatchを利用した実行ができるので、ぜひ設定しておきましょう。
{
"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だけではこの警告は表示されません。
独自パッケージの名前解決をさせるために、プログラムのルートディレクトリをセットします。
{
"executionEnvironments": [
{
"root": "app",
"pythonVersion": "3.8"
}
]
}
Code Runner
現在開いているファイルをワンクリック or Control + Option + N (macOS) で実行してくれます。実行時間も表示されるのでプログラムの最適化にも使えそうです。
「appディレクトリがPython実行のルートディレクトリ($workspaceRoot/app
)で、Sandboxの仮想環境($pythonPath
)で実行してくれ」という設定をします。
{
"code-runner.executorMap": {
"python": "export PYTHONPATH=$workspaceRoot/app && $pythonPath -B -u $fullFileName"
}
}
Pythonの開発が爆速になるオススメのプラグイン
Python Docstring Generator
njpwerner.autodocstring
- Java Docのようなクラスや関数のドキュメントのフォーマットを生成してくれます
- Type Hintを読み取ってくれます
さいごに
PythonのIDEだとPyCharmやWingが有名ですが、VSCodeも拡張機能を揃えてしっかりconfigを書けば強力なIDEになり得ると思います。
(至るところにPYTHONPATHを書かないといけないのは面倒ですが...)
MicrosoftからPylanceというプラグインがbetaでリリースされており、さらにVSCodeでの開発が便利になると期待しています。
また、"Done is better than perfect." の精神で書き上げたので、わかりにくい部分はぜひご指摘をお願いします。また、他にオススメの設定などありましたらコメントで教えていただけるとありがたいです。
お読みいただきありがとうございました。お役に立てたら LGTM いただけると励みになります。