Python環境構築(Anaconda + VSCode) @ Windows10 【2020年１月版】

# 背景
Anaconda + VS Code でPython環境を作るときに、最新の設定方法が出てこなくて困ったので、今からやる方のために自分のメモを公開します。
2017年頃にVS Codeの仕様変更があったみたいですね。古い解説文を読むときには注意が必要です。

参考にした記事：
[@Atupon0302さん :  Windows10環境にAnaconda+Visual Studio CodeでPython環境を構築【2017年9月】](https://qiita.com/Atupon0302/items/ee3303629ce0b2ae58d7)


# この記事で書くこと
この記事では、Windows10 パソコンにAnacondaとVS CodeでPython環境を構築し、簡単なプログラムのビルドとデバッグができるところまでの手順を書きます。

Python導入の目的は、機械学習で遊ぶことですので、機械学習用のPythonライブラリを一気に入れられるAnacondaを使います。
（以前、機械学習関連のライブラリを個別に入れたらものすごく苦労したの。。。）


# 前提環境 
* Windows10 Enterprise
* Anaconda 2019.10
* VS Code 1.41.1
* VS Code Python Extention 2020.1.58038


# 手順

## Anacondaを入れる

### 本体のインストール

[Anaconda](https://www.anaconda.com/)ページのDownloadリンクからWindows向けモジュールを入手します。Pythonバージョンは3.xを選択します。
インストーラの内容はすべてデフォルトで、Nextボタンを押すだけです。
私は「Anaconda 2019.10 for Windows Installer」でした。
![anaconda1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105029/e61e97db-bf0a-efb5-6eed-a602d9ce0eca.png)

### 動作確認

スタートメニューからAnaconda3＞Anaconda Promptを起動します。
Anaconda Promptで以下を実行して、バージョン番号が返ってきたらOK。

```bash
conda -V
python -V 
```


### 仮想環境の作成
実行環境のライブラリ構成を保持するために、自分用の仮想環境を作っておきます。
デフォルトではbase環境があり、すでにnumpyなどの便利なライブラリが入っているので、baseをコピーして新しい環境を作成します。
`--clone`オプションを使わない場合はまっさらな新環境が作れます。ここに自分で好きなライブラリを追加していきます。（後述）

```bash
# py37環境を作成（baseを複製する場合）
conda create -n py37 --clone base 

# py37環境を作成（pythonのみ入れて作成し、必要なライブラリはあとで追加する場合）
conda create -n py37 python=3.7
```

作成した環境を確認します。

```bash
# 環境一覧を表示
conda info -e
```

有効になっている環境に * がついています。現在はデフォルトのbase環境が有効です。

```console
(base) C:\Users\XXXX>conda info -e
# conda environments:
#
py37                     C:\Users\XXXX\.conda\envs\py37
base                  *  C:\Users\XXXX\Anaconda3
```

新しい環境にスイッチするには`conda activate`コマンド。

```bash
# py37環境を有効にする
conda activate py37
```

成功すると、プロンプトに環境名(py37)がつく

```console
(base) C:\Users\XXXX>activate py37

(py37) C:\Users\XXXX>
```

その環境に入っているライブラリの表示は`conda list`

```bash
# numpyライブラリのバージョンを見る
conda list numpy
```

```console
(py37) C:\Users\XXXX>conda list numpy
# packages in environment at C:\Users\XXXX\Anaconda3\envs\py37:
#
# Name                    Version                   Build  Channel
numpy                     1.16.5           py37h19fb1c0_0
numpy-base                1.16.5           py37hc3f5095_0
numpydoc                  0.9.1                      py_0
```

ライブラリの追加が必要な場合は、`conda search` `conda install`で追加する。

```bash
# djangoライブラリを探す場合
conda search django

# djangoライブラリを追加する場合
conda install django
```

環境から抜けるには、`conda deactivate`コマンド。
（コマンドが`deactivate` となっている説明もありますが、現在非推奨なので`conda deactivate`にします。）

```bash
# 環境から抜ける
conda deactivate
```

condaコマンドは、Pythonで提供されているPIPコマンドみたいに使います。Anaconda環境では、`pip`ではなく`conda`コマンドを使ってパッケージ管理を行います。

### Pythonのパス
上記のように、自分の作業に合わせて仮想環境を作って作業するので、WindowsのPATHの設定は行いません。（コントロールパネルから設定するアレ）



## VS Codeを入れる


### 本体のインストール
[vscode](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)ページのDownloadリンクからWindows向けモジュールをとってきて入れます。
インストーラの内容はデフォルトで入れます。
![vscode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105029/88c8294b-3207-1332-6cf5-3490cf22d853.png)

### 動作確認
スタートメニューからVisual Studio Code を起動します。以下VS Codeと記述します。

### セットアップ：Pythonをビルド&デバッグできるようにする

* Python拡張を入れる
VS Codeのツールバーの拡張ボタンをクリックして、「Python」で検索し、Python拡張（Python extention for Visual Studio Code)をいれます。

※画像のバージョンでは問題がでたので、最終的にPython Extention 2020.1.58038をいれました。

![000231.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105029/edc0f84b-73bb-df74-bfac-59fc0d7da71f.png)


* パス設定をする
VS Codeの、File>Preferences>Settingsで設定画面を開く。

1. 検索キーに「python.pythonpath」と入れて、Pythonのパスを設定。
値は、Anaconda上で`conda info -e`と入力した値を参考にします。
`C:\Users\XXXX\Anaconda3\envs\py37\python.exe`

1. 検索キーに「python.condapath」と入れて、Condaコマンドのパスも設定。
値はconda.exeがあるディレクトリ名を指定します。（Scripts）
C:\Users\XXXX\Anaconda3\Scripts\


* ビルド用のタスクを作成する

適当な作業用フォルダを作成し、test.pyを書きます。
このとき、作業用フォルダがAnacondaの仮想環境の下にあると、後述のデバッグ実行でブレークポイントが使えなくなります。
VS Codeで開発するときは、Anacondaの仮想環境とは別の開発フォルダが必要です（せっかく環境を分けたのに、ちょっと面倒、、、）

参考：[VS CodeでPython仮想環境のデバッグ実行時にブレークポイントで止まらない問題](https://qiita.com/EngineerShiba/items/6c7d2b97829a4c4092d7)



以下は`c:\dev\pydev`にて作業しています。

```sh:test.py
print("foo")
print("bar")
print("ふがふが")
```

VS Codeでtest.pyを開いた状態で、「Ctrl + Shift + B」(ビルドタスクの実行コマンド)を実行すると、タスクがないという警告メッセージが表示されます。
メッセージをクリックすると、テンプレートからタスクを作成するというメッセージが表示されるのでさらにクリックし、テンプレート種別から「Others」を選択するとタスク設定ファイル(tasks.json)が作成されます。
![task01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105029/6cca66ab-b352-64a1-e5c2-09164a26236a.png)
![task02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105029/47908a2d-e4e3-0704-2bf1-b6578246dfa1.png)
![task03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105029/544b7811-9094-7d15-5d33-b9728b1c64de.png)

tasks.jsonを以下のように編集し保存します。
ポイントは、`command`に、settings.jsonで指定したPythonのパスを書くことです。


```tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "python build",
            "type": "shell",
            "command": "${config:python.pythonPath}",
            "args": ["${file}"],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
```

* ビルドする

「Ctrl + Shift + B」

task.jsonを保存したのち、test.pyを開いた状態で、「Ctrl + Shift + B」(ビルドタスクの実行コマンド)を実行すると、コンソールに実行結果が表示されます。
![000241.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105029/94c888f6-1582-0dce-a8ae-1ae3d3a77f43.png)


* デバッグする

「F5」

VS Codeでtest.pyを開いた状態で、「F5」(ビルドタスクの実行コマンド)を実行するとデバッグモードで実行されます。
ブレークポイントを置くと、黄色くハイライトされ、ステップ実行が可能になります。
![000242.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105029/fe7927e0-6588-89b1-70d0-859a52f992e5.png)


# はまったところ

* condaのエラーがでる。

Python Extentionの最新(2020.1) を使っていたのに、[PythonExtention 2019.12版を使うとcondaが見つからないエラーが出るので2020.1を使おう](https://github.com/microsoft/vscode-python/issues/9154)という問題が発生した。Python Extentionを2020.1.57204から2020.1.58038に更新したら消えたけどこれでいいのかな？

# 参考リンク
[公式：VS CodeでPython](https://code.visualstudio.com/docs/python/environments)
[公式：環境変数の設定](https://code.visualstudio.com/docs/python/settings-reference)