Windows + Python + PipEnv + Visual Studio Code でPython開発環境

昔、以下の記事を書きましたが、アップデートで状況が変わっているようなので、
内容を更新して、再投稿します。

[Windows + Python 3.6 + PipEnv + Visual Studio Code でPython開発環境](https://qiita.com/youkidkk/items/b6a6e39ee3a109001c75)

# 環境

* Windows 10
* Python version 3.8.2
* PipEnv version 2018.11.26

# Python のインストール

[Python公式サイト](https://www.python.org/)より、ダウンロード。
ここでは [python-3.8.2-amd64.exe](https://www.python.org/ftp/python/3.8.2/python-3.8.2-amd64.exe) を使用しています。

インストーラを実行し、Pythonをインストールします。
注意点は以下です。

* pip のインストールを行うこと（-> 2ページ目 「pip」をチェック）
* Python を環境変数に追加すること（-> 3ページ目 「Add Python to environment variables」をチェック）
 
![Python_Install-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/c0641a31-3aef-a505-137c-712ce0fbeb07.png)
![Python_Install-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/a883b25f-6b48-1dff-41d5-1071a3b1ef38.png)
![Python_Install-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/b65ca0f1-11ad-de0f-7c53-7c01e63bbe89.png)

# PipEnv のインストール

コマンドプロンプトを起動し、以下を実行します。

```shell:PipEnvのインストール
pip install pipenv
```

## 環境変数の追加

デフォルトですと PipEnv はユーザーホーム配下にインストールしたパッケージを格納します。
以下の環境変数を追加することによって、プロジェクトのディレクトリに格納されるようになります。

* PIPENV_VENV_IN_PROJECT : true

# VS Code の初期設定

## 拡張機能

以下の拡張機能を追加します。

* Python（ms-python.python）

![VSCode-PythonExtension.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/23319dcf-9576-2716-2a68-17d915c63c7f.png)

## ユーザーの settings.json 設定

activate コマンドが PowerShell ではうまく動作しない場合がある（？）のと、
ワークスペースの設定だとまたまたうまく動作してくれない（？）ようなので、
コマンドプロンプトをデフォルトとするよう、ユーザー設定の settings.json にて以下を追加します。

```json:[ユーザーホーム]\AppData\Roaming\Code\User\settings.json
{
    "terminal.integrated.shell.windows": "C:/WINDOWS/System32/cmd.exe",
}
```

# VS Code のプロジェクト作成～実行まで

## プロジェクトフォルダの作成 ＆ PipEnv環境作成

適当なディレクトリを切って、VSCode で開きます。
ここでは「D:\Temp\python-test」としています。

![VSCode-OpenVSCode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/08f28145-83b0-8cb1-1115-40b0a5f06479.png)

表示 -> 統合ターミナル でターミナルを開き、PipEnvコマンドを実行します。
引数は使用する Python のバージョンに合わせて変更してください。

```shell:PipEnv環境作成
pipenv --python 3.8
```

![VSCode-ExecutePipEnv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/1dd44132-d280-2710-0701-4fdd23f01894.png)


実行すると、以下がプロジェクト直下に作成されます。

* .venv
* PipFile

## ワークスペースの settings.json 設定

仮想環境等のパス設定、フォーマッター、Lint の設定を行います。

```json:[ワークスペースフォルダ]\.vscode\settings.json
{
    // 拡張機能のロード時にターミナルでPython環境をアクティブにする。
    "python.terminal.activateEnvInCurrentTerminal": true,
    // 仮想環境のパス。作成した仮想環境を指定する。
    "python.venvPath": "{$workspaceFolder}/.venv",
    "python.autoComplete.extraPaths": [
        "{$workspaceFolder}/.venv/Lib/site-packages",
    ],
    // フォーマッターの設定。autopep8 を指定する。
    "python.formatting.provider": "autopep8",
    "python.jediEnabled": false,
    // Lintの設定。flake8、mypy を有効化する。
    "python.linting.flake8Enabled": true,
    "python.linting.mypyEnabled": true,
    "python.linting.pylintEnabled": false,
    // 以下はお好みで。
    "editor.formatOnSave": true,
    "python.autoComplete.addBrackets": true,
}
```

## パッケージのインストール

ターミナル上で pipenv コマンドを使用することで作成した仮想環境にパッケージがインストールされます。
コードフォーマット、Lint のため、以下のパッケージをインストールします。
開発環境のみで使用するため、--dev オプションを付けます。

* autopep8
* flake8
* mypy

```shell:autopep8、flake8、mypyのインストール
pipenv install autopep8 flake8 mypy --dev
```

ここでは上記パッケージの他、サンプルソース用に以下を追加しています。

* numpy
* matplotlib

```shell:numpy、matplotlibのインストール
pipenv install numpy matplotlib
```

## 実行

適当にPythonソースファイルを作ります。

![VSCode-NewSource.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/30b03a6c-d014-3b29-3d09-d06872b2d8ba.png)

```python:test.py
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-np.pi, np.pi)
y = np.sin(x)
plt.plot(x, y)
plt.show()
```

設定がうまくいっていれば、ドキュメントの表示やコード補完、フォーマッター、Lint が効くはずです。

![VSCode-ShowDocument.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/ba631360-fa76-64ce-c21f-9a55cd876be3.png)
![VSCode-CodeAssist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/58c2b864-bfdc-aefa-e96d-fd98fd52d430.png)

実行する場合は、「実行」パネルを開いて、
「launch.json ファイルを作成します」→ 「Python File」と選択します。

![VSCode-Create-launch.json.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/40e387ee-0636-b721-06bc-580a9fce4da1.png)

勝手に .vscode/launch.json が作成され、Python用の実行構成が設定されます。

![VSCode-Create-launch.json-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/ee854dd5-f4ee-0ef3-e3cd-55f18e36af33.png)

後は、実行対象のソースを開いて、F5キー押下で実行されます。

![VSCode-Execute.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114386/b2137164-aa85-8a5b-29ca-db85bfa7a00f.png)

実行引数を指定したい場合は .vscode/launch.json に「"args"」の設定を追加します。

```json
        {
            "name": "Python: Current File",
            
            "args": [
                "hoge",
                "fuga",
                "piyo"
            ]
        },
```

# .gitignore

```
/.venv
/.mypy_cache
/Pipfile.lock
/tmp
/**/__pycache__
```