LoginSignup
25
33

More than 1 year has passed since last update.

Visual Studio CodeとPython

Last updated at Posted at 2021-01-29
1 / 24

概要

WindowsでのPythonの環境構築、Visual Studio Code(以下VSCode)での拡張機能の説明(解析、Notebook、コード整形、デバッグなど)について説明します。

💡 かごもく #40 開発環境の紹介 - connpass発表用の資料です。


Python環境構築

Python環境構築では、インタプリタ(python)バージョン切替、仮想環境(インタプリタバージョンとパッケージのセット)切替、そしてパッケージ管理に何を選定するかを決める必要があります。


Python環境構築のパターン

Windowsではおおむね以下のパターンとなるかと思います。

  1. Anaconda
  2. Python + py.exe + venv + pip
  3. 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)
  • 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) インテリセンス

  • オートコンプリート
  • 定義の参照(F12)、その場で定義を参照(ALT + F12
  • 定義を使用している個所を参照(右クリックメニューから選択)
  • importエラー時に該当するimportを挿入する pylanceの機能。
  • 必要に応じて型チェックを有効化することができる(python.analysis.typeCheckingModepylanceの機能。@simonritchie さんの記事も参照 既定値は無効(off) プロジェクトに応じて型チェックの必要性は変わります。プロジェクトメンバーで協議し統一することが大事です。 |設定値|動作| |---|---| |off|型チェックは行われない(未解決のインポート/変数診断に関するチェック)| |basic|offのルールに加えて基本的な型チェック(型アノテーションがしてある箇所で正しいかどうか)| |strict|off,basicに加えて厳格な型チェック(型アノテーションなどがしていない箇所自体もエラーになる)|

(2) 仮想環境の切り替え

プロジェクトフォルダ直下に仮想環境フォルダを作成することで、.pyファイルを開いたタイミングで仮想環境を自動認識して切り替わります。

💡 仮想環境フォルダ名には.venvが良く使われます。
💡 画面の左下で確認できます。

image.png


(3) Jupyter Notebooksのサポート (Jupyter Notebook UI)

Jupyter NotebooksをVSCode上で行うことができます。

  • VSCode上でJupyter NotebookのUIを実行できる
  • 以下のコマンドでJupyter Notebookを作成できる >Create New Blank Jupyter Notebook image.png

実行サンプル

image.png


(4) インタラクティブウインドウ (# %%)

誤解を恐れずに言うと、Jupyter Notebooksのような動きを.pyファイルで行うことができます。つまり逐次動作を確認しながら、.pyファイルを作成することができる機能となります。

  • .pyファイルに、# %%を入力することで、PythonファイルをNotebookのようにセルを作って逐次実行することができる。
  • "Shift + Enter "でセルが実行され、結果が表示される
  • # %%はコメントなので.pyファイルの直接実行時には無視される

実行サンプル

image.png


(5) コードの静的解析(リンター)

文法チェック、使用していない変数の確認などを行うことができます。

Python: Select Linterを実行して、コードの静的解析(リンター)を選択します。特に問題のない限り既定のPylintでよいと思われます(Flake8 なども選択できます)。

💡 VSCodeのPythonは、最も多くのPython開発者に対してわかりやすい一連の文法チェックを使用するように既定で構成されています。

選択したリンターがインストールされていない場合は、プロジェクトの仮想環境にリンターが自動でインストールされます。

実行サンプル

image.png


(6) コード整形(フォーマッター)

pip で black をインストールし、コード整形(フォーマッター)のProviderとして設定します。

整形の規約としては、autopep8, black, yapf の 3 種類あります。
black が一番厳しい規約のため仕事として行うならば black が望ましいと思われます。(誰でも同じような書式としてフォーマットされます。)

💡 "ALT + SHIFT + F"で整形できます。

手順

方法1

  1. .pyファイルを開いて、"ALT + SHIFT + F"を実行

  2. ダイアログで"Use black"を選択

    image.png

方法2

  1. blackをpipでインストールする

    pip install black
    
  2. 設定で有効にする

    設定でpython.formatting.providerを検索し、blackを設定
    image.png


(7) デバッグ

アクティビティバーで実行ビューを選択し、構成の初期化とlaunch.jsonファイルの作成を行い、実行ビューから実行することでデバッグできます。

Django, Flusk, 単体.pyファイルの実行などの構成ファイル(launch.json)が用意されています。

image.png

手順(単体.pyファイル)

💡 引数が必要な場合などはlaunch.jsonファイルのカスタマイズが必要です。

  1. デバッグする.pyファイルを開く

    image.png

  2. アクティビティバーで実行ビューを選択し「実行とデバッグ」を実行

    image.png

  3. 「Python File」を選択

    image.png

  4. デバッグできる

    ブレークポイントで止まった時の例
    image.png

    捕捉されなかった例外(Uncaught Exception)が発生したとき
    image.png

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 を使用したテストをサポートしています。

テストが検出されると、アクティビティバーのテストエクスプローラーアイコンも表示されます。テストエクスプローラーで、テストを視覚化、移動、および実行することができます。

手順

  1. F1キーからコマンドでPython: Discover Testsを実行

    image.png

  2. フレームワーク有効確認のダイアログが表示されるので選択

    image.png

  3. 使用するフレームワークを選択(基本的にはunittestでOK)

    image.png

  4. テストコードが保存されたフォルダを選択

    image.png

  5. テストコードファイルのファイル名パターンを指定

    image.png

  6. アクティビティバーのテストエクスプローラーにテストが表示される

    image.png

  7. すべての単体テストを実行

    image.png

  8. 単体テストの出力を表示

    image.png

    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)
    
  9. 「Deubg Test」からデバッグを行う

    image.png


(9) リファクタリング

PyCharm に比べると種類は少ないですがリファクタリングがサポートされています。

  • 変数の抽出 選択したテキストの類似したすべての出現箇所を抽出し、変数に置き換える
  • メソッドの抽出 選択した式またはブロックの類似したすべての出現箇所を抽出し、メソッド呼び出しに置き換える
  • インポートの並べ替え 同じモジュールからの特定のインポートを 1 つのステートメントに統合し、ステートメントをアルファベット順に整理する

(10) 関数の説明(Docstring)を自動生成

関数定義にDocstringを記載するとVSCodeのコーディング中に関数の説明が表示されます。

Docstringの書式統一のためにも、Docstringの記載をある程度自動化する手順を紹介します。


引用元:https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring

手順

  1. 関数宣言の直下で"""を入力するとGenerate docstringという入力支援が表示されます。
  2. 選択またはEnterでDocstringが自動的に挿入されます。引数が指定されている場合は引数名も自動挿入されます。

(11) TensorFlow Snippets

Visual Studio CodeでTensorFlowモデルを開発する際に有用なSnippetsとなります。

下記画像にあるように、tensorboardも含めた基本的な学習用スクリプト作成を効率的に行うことができます。


引用元:https://marketplace.visualstudio.com/items?itemName=vahidk.tensorflow-snippets


PyCharm

稟議を通せるなら有償のパッケージを購入することもお勧めです。


参考資料

25
33
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
25
33