概要
WindowsでのPythonの環境構築、Visual Studio Code(以下VSCode)での拡張機能の説明(解析、Notebook、コード整形、デバッグなど)について説明します。
💡 かごもく #40 開発環境の紹介 - connpass発表用の資料です。
Python環境構築
Python環境構築では、インタプリタ(python)バージョン切替、仮想環境(インタプリタバージョンとパッケージのセット)切替、そしてパッケージ管理に何を選定するかを決める必要があります。
Python環境構築のパターン
Windowsではおおむね以下のパターンとなるかと思います。
- Anaconda
- Python + py.exe + venv + pip
- Python + WSL2(Ubuntu) + pyenv + venv + pip
💡 py.exe(or pyenv) + venv + pip以外に、pipenv、poetryなどもあります。
Anaconda
- Windows上にAnacondaをインストール
- インタプリタ切り替え、仮想環境切り替え、パッケージ管理をまとめて行うことができる
- 機械学習に関連したライブラリが最適化されている(速度が速い)
- 公式リポジトリの利用規約は要確認
Python + py.exe + venv + pip
- Windows上にPython Windows版をインストール
- Windows版のPythonはインタプリタ切替のランチャ(py.exe)が標準添付
- venv等で仮想環境を構築し、pipでパッケージ管理を行う
- Windowsでは動作しないライブラリもある(例:uvloop)
Python + py.exe + venv + pip コード例
py -3.6 -m venv .venv
& .\.venv\Scripts\Activate.ps1
python --version
pip install -r requiremtns.txt
Python + WSL2(Ubuntu) + pyenv + venv + pip
- Windows上にWSL2でUbuntuをインストールし、Ubuntu上にPython環境を構築
- pyenvをインストールしてインタプリタのインストールと切り替え
- venv等で仮想環境を構築し、pipでパッケージ管理を行う
- wsl2の機能でUbuntu上のファイルをWindowsエクスプローラーで操作できる
Python + WSL2(Ubuntu) + pyenv + venv + pipコード例
pyenv shell 3.6.9
python -m venv .venv
source .venv\bin\activate
python --version
pip install -r requiremtns.txt
💡 WSL2上のDockerからGPUを使用する実装も進んでいます(2021年1月31日時点でプレビュー版)。
待ってました CUDA on WSL 2 - Qiita
導入する拡張機能
- Python(ms-python.python)
- 以下も自動的にインストール
- Pylance(ms-python.vscode-pylance)
- Pyrightの後継。PyrightのGithubでもPylanceの使用が推奨されている
- Jupyter(ms-toolsai.jupyter)
- Pylance(ms-python.vscode-pylance)
- 以下も自動的にインストール
- Visual Studio Intelicode(visualstudioexptteam.vscodeintellicode)
- 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上で行うことができます。
実行サンプル
(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
方法2
(7) デバッグ
アクティビティバーで実行ビューを選択し、構成の初期化とlaunch.jsonファイルの作成を行い、実行ビューから実行することでデバッグできます。
Django, Flusk, 単体.pyファイルの実行などの構成ファイル(launch.json)が用意されています。
手順(単体.pyファイル)
💡 引数が必要な場合などはlaunch.jsonファイルのカスタマイズが必要です。
-
デバッグする.pyファイルを開く
-
アクティビティバーで実行ビューを選択し「実行とデバッグ」を実行
-
「Python File」を選択
-
デバッグできる
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]PylanceのVS Code拡張機能をさっそく使ってみた。 - Qiita
- Pythonで使えるリファクタリングツールたち - Qiita
- リファクタリングツールあれこれ — pyconjp2014 1 documentation
- 自動テスターなら入れておきたい!Visual Studio Codeオススメ拡張21選 (2020年8月版) - Qiita
-
Python - Wikipedia
- バージョン、サポート期限等
- 中級者へのModern Python
- Python オレオレ、コレだけはやっておけ 2021 - Qiita
- nao's blog – Pipenv をやめて venv を使いだした話
- python - What is pyproject.toml? - Stack Overflow
- 【2020年新人研修資料】ナウでヤングなPython開発入門 - Speaker Deck
- VSCode拡張機能「Python Docstring Generator」でPythonのdocstringを自動生成しよう | DevelopersIO