Visual Studio Code(VSCode)とPython
概要
Visual Studio Code(以下VSCode)でPython開発時の拡張機能(解析、Notebook、コード整形、デバッグなど)について説明します。
以下記事を抜粋し表現を修正。
導入する拡張機能
- Python(ms-python.python)
- Pylance(ms-python.vscode-pylance)
- Pyrightの後継。PyrightのGithubでもPylanceの使用が推奨されている
- Visual Studio Intelicode(visualstudioexptteam.vscodeintellicode)
- Jupyter(ms-toolsai.jupyter)
- 他の拡張機能と同時にインストール
- Python Docstring Generator(njpwerner.autodocstring)
- GitLens(eamodio.gitlens)
- Git Graph(mhutchie.git-graph)
- TensorFlow Snippets(vahidk.tensorflow-snippets)
- TensorFlowを利用した機械学習を行う場合
主な機能
- (1) インテリセンス
- (2) 仮想環境の自動切換え
- (3) Jupyter Notebooksのサポート (Jupyter Notebook UI)
- (4) インタラクティブウインドウ (# %%)
- (5) コードの静的解析(リンター)
- (6) コード整形(フォーマッター)
- (7) デバッグ
- (8) テスト
- (9) リファクタリング
- (10) 関数の説明(Docstring)を自動生成
- (11) TensorFlow Snippets
(1) インテリセンス
- オートコンプリート
- 定義の参照(
F12
)、その場で定義を参照(ALT + F12
) - 定義を使用している個所を参照(右クリックメニューから選択)
- importエラー時に該当するimportを挿入する
pylanceの機能。 - 必要に応じて型チェックを有効化することができる(
python.analysis.typeCheckingMode
)
pylanceの機能。@simonritchie さんの記事も参照
既定値は無効(off)
プロジェクトに応じて型チェックの必要性は変わります。プロジェクトメンバーで協議し統一することが大事です。設定値 動作 off 型チェックは行われない(未解決のインポート/変数診断に関するチェック) basic offのルールに加えて基本的な型チェック(型アノテーションがしてある箇所で正しいかどうか) strict off,basicに加えて厳格な型チェック(型アノテーションなどがしていない箇所自体もエラーになる)
(2) 仮想環境の切り替え
プロジェクトフォルダ直下に仮想環境フォルダを作成することで、.pyファイルを開いたタイミングで仮想環境を自動認識して切り替わります。
💡 仮想環境フォルダ名には.venv
が良く使われます。
💡 画面の左下で確認できます。
(3) Jupyter Notebooksのサポート (Jupyter Notebook UI)
Jupyter NotebooksをVSCode上で行うことができます。
- VSCode上でJupyter NotebookのUIを実行できる
- 以下のコマンドでJupyter Notebookを作成できる
>Create New Blank Jupyter Notebook
実行サンプル
(4) インタラクティブウインドウ (# %%)
誤解を恐れずに言うと、Jupyter Notebooksのような動きを.pyファイルで行うことができます。つまり逐次動作を確認しながら、.pyファイルを作成することができる機能となります。
-
.py
ファイルに、# %%
を入力することで、PythonファイルをNotebookのようにセルを作って逐次実行することができる。 - "Shift + Enter "でセルが実行され、結果が表示される
-
# %%
はコメントなので.py
ファイルの直接実行時には無視される
実行サンプル
(5) コードの静的解析(リンター)
文法チェック、使用していない変数の確認などを行うことができます。
Python: Select Linter
を実行して、コードの静的解析(リンター)を選択します。特に問題のない限り既定のPylintでよいと思われます(Flake8 なども選択できます)。
💡 VSCodeのPythonは、最も多くのPython開発者に対してわかりやすい一連の文法チェックを使用するように既定で構成されています。
選択したリンターがインストールされていない場合は、プロジェクトの仮想環境にリンターが自動でインストールされます。
実行サンプル
(6) コード整形(フォーマッター)
pip で black をインストールし、コード整形(フォーマッター)のProviderとして設定します。
整形の規約としては、autopep8, black, yapf の 3 種類あります。
black が一番厳しい規約のため仕事として行うならば black が望ましいと思われます。(誰でも同じような書式としてフォーマットされます。)
💡 "ALT + SHIFT + F"で整形できます。
手順
方法1
-
.pyファイルを開いて、"ALT + SHIFT + F"を実行
-
ダイアログで"Use black"を選択
方法2
-
blackをpipでインストールする
pip install black
-
設定で有効にする
設定で
python.formatting.provider
を検索し、black
を設定
(7) デバッグ
アクティビティバーで実行ビューを選択し、構成の初期化とlaunch.jsonファイルの作成を行い、実行ビューから実行することでデバッグできます。
Django, Flusk, 単体.pyファイルの実行などの構成ファイル(launch.json)が用意されています。
手順(単体.pyファイル)
💡 引数が必要な場合などはlaunch.jsonファイルのカスタマイズが必要です。
-
デバッグする.pyファイルを開く
-
アクティビティバーで実行ビューを選択し「実行とデバッグ」を実行
-
「Python File」を選択
-
デバッグできる
ブレークポイントで止まった時の例
捕捉されなかった例外(Uncaught Exception)が発生したとき
launch.jsonファイルのカスタマイズ例
現在のプロジェクトディレクトリ(${workspaceFolder}
) でmain.py
ファイルを起動するために設定された Python インタプリタを使用する場合の例です。args[]配列にコマンドライン引数を追加したり、env[] 配列を追加して環境変数を追加することもできます。
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: tornado",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/main.py",
"args": [],
"console": "integratedTerminal"
}
]
}
(8) テスト
Python 組み込みの unittest、または pytest を使用したテストをサポートしています。
テストが検出されると、アクティビティバーのテストエクスプローラーアイコンも表示されます。テストエクスプローラーで、テストを視覚化、移動、および実行することができます。
手順
-
F1キーからコマンドで
Python: Discover Tests
を実行 -
フレームワーク有効確認のダイアログが表示されるので選択
-
使用するフレームワークを選択(基本的には
unittest
でOK) -
テストコードが保存されたフォルダを選択
-
テストコードファイルのファイル名パターンを指定
-
アクティビティバーのテストエクスプローラーにテストが表示される
-
すべての単体テストを実行
-
単体テストの出力を表示
start test_unittest.Test_TestIncrementDecrement.test_decrement test_unittest.Test_TestIncrementDecrement.test_increment test_decrement (test_unittest.Test_TestIncrementDecrement) ... FAIL NoneType: None test_increment (test_unittest.Test_TestIncrementDecrement) ... ok ====================================================================== FAIL: test_decrement (test_unittest.Test_TestIncrementDecrement) ---------------------------------------------------------------------- Traceback (most recent call last): File "c:\Users\fukumori\source\repos\pythontest\test_unittest.py", line 10, in test_decrement self.assertEqual(inc_dec.decrement(3), 4) AssertionError: 2 != 4 ---------------------------------------------------------------------- Ran 2 tests in 0.000s FAILED (failures=1)
-
「Deubg Test」からデバッグを行う
(9) リファクタリング
PyCharm に比べると種類は少ないですがリファクタリングがサポートされています。
- 変数の抽出
選択したテキストの類似したすべての出現箇所を抽出し、変数に置き換える - メソッドの抽出
選択した式またはブロックの類似したすべての出現箇所を抽出し、メソッド呼び出しに置き換える - インポートの並べ替え
同じモジュールからの特定のインポートを 1 つのステートメントに統合し、ステートメントをアルファベット順に整理する
(10) 関数の説明(Docstring)を自動生成
関数定義にDocstringを記載するとVSCodeのコーディング中に関数の説明が表示されます。
Docstringの書式統一のためにも、Docstringの記載をある程度自動化する手順を紹介します。
引用元:https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring
手順
- 関数宣言の直下で
"""
を入力するとGenerate docstringという入力支援が表示されます。 - 選択またはEnterでDocstringが自動的に挿入されます。引数が指定されている場合は引数名も自動挿入されます。
(11) TensorFlow Snippets
Visual Studio CodeでTensorFlowモデルを開発する際に有用なSnippetsとなります。
下記画像にあるように、tensorboardも含めた基本的な学習用スクリプト作成を効率的に行うことができます。
引用元:https://marketplace.visualstudio.com/items?itemName=vahidk.tensorflow-snippets
PyCharm
稟議を通せるなら有償のパッケージを購入することもお勧めです。
環境構築の手間がなくプログラミングそのものに集中できます。
-
最強のPython統合開発環境PyCharm - Qiita
- ファイルエンコーディング記述
- コード解析
- ⚡ Template内のステップ実行でのデバッグも可能!
参考資料
-
Python - Wikipedia
- バージョン、サポート期限等
- nao's blog – Pipenv をやめて venv を使いだした話
- [Python]PylanceのVS Code拡張機能をさっそく使ってみた。 - Qiita
- Pythonで使えるリファクタリングツールたち - Qiita
- リファクタリングツールあれこれ — pyconjp2014 1 documentation
- 自動テスターなら入れておきたい!Visual Studio Codeオススメ拡張21選 (2020年8月版) - Qiita
- 中級者へのModern Python
- Python オレオレ、コレだけはやっておけ 2021 - Qiita
- python - What is pyproject.toml? - Stack Overflow
- 【2020年新人研修資料】ナウでヤングなPython開発入門 - Speaker Deck
- VSCode拡張機能「Python Docstring Generator」でPythonのdocstringを自動生成しよう | DevelopersIO
Discussion