python環境構築 Miniconda3ハンズオン 複数バージョンを共存させる

## できるようになること
* Miniconda3を使ってwindowsにpython環境を構築する
* 複数のバージョンのpython環境を同居させることができる
* こっちのscriptはpython3.5、こっちのscriptはpython3.7やpython2.7という風に複数の環境を共存させることができる

## Miniconda3のインストール

* [公式](https://docs.conda.io/en/latest/miniconda.html)にアクセスして自分のOSとCPUに合わせてインストールプログラムをダウンロード
    * Miniconda3の最新版でよい
* ダウンロードしたexeを実行してウィザードを進めてインストール
* ※[Anaconda](https://www.anaconda.com/distribution/)というはじめからいろんなツールが入っているものもあります。
* インストール後コマンドプロンプトでcondaコマンドが通ればOK

```
C:\>conda -V
conda 4.7.10
```
* コマンドが通らない場合は環境変数のPATHにconda.exeの在り処を設定する
    * だいたいここらへんにあると思う`%USERPROFILE%\AppData\Local\Continuum\miniconda3\Scripts`

* コマンドは`conda`と入力すると使えるコマンド一覧がでてきます。

```
C:\>conda
usage: conda-script.py [-h] [-V] command ...

conda is a tool for managing and deploying applications, environments and packages.

Options:

positional arguments:
  command
    clean        Remove unused packages and caches.
    config       Modify configuration values in .condarc. This is modeled
                 after the git config command. Writes to the user .condarc
                 file (C:\Users\xxxxxx\.condarc) by default.
    create       Create a new conda environment from a list of specified
                 packages.
    help         Displays a list of available conda commands and their help
                 strings.
    info         Display information about current conda install.
    init         Initialize conda for shell interaction. [Experimental]
    install      Installs a list of packages into a specified conda
```

## 仮想環境の確認
* 現在作成されている仮想環境の一覧表示

```
C:\>conda info -e
# conda environments:
#
base                  *  C:\Users\xxxxxx\AppData\Local\Continuum\miniconda3
```
* 初期状態はbaseという名前の仮想環境が1つ存在していて、右側に表示されているpathの中に`python.exe`があります。

## 仮想環境へ入る
* 仮想環境「base」に入ります。

```
C:\>conda activate base
(base) C:\>
```

* プロンプトの先頭に`(base)`のように仮想環境名が表示されていればactiveになっている状態です。
* この状態でpythonインタプリタを起動します。

```
(base) C:\>python
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
```
* python3.6.4と表示されています、これは`base`のpythonバージョンになります。`base`はデフォルトの仮想環境なので基本的には使いません。


## 仮想環境の作成
* 構文

```
conda create --name <仮想環境名> python=<バージョン>
```
* python3.7環境を作成する
    * 途中で`Proceed ([y]/n)? `と聞かれるので`y`を押す

```
(base) C:\>conda create --name vpy3.7 python=3.7
Collecting package metadata (current_repodata.json): don
.
.
.
<省略>
.
.
.
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate vpy3.7
#
# To deactivate an active environment, use
#

```
* 作成されたか確認

```
C:\>conda info -e
# conda environments:
#
base                  *  C:\Users\xxxxxx\AppData\Local\Continuum\miniconda3
vpy3.7                   C:\Users\xxxxxx\AppData\Local\Continuum\miniconda3\envs\vpy3.7
```
* vpy3.7に入ってpythonインタプリタを起動する

```
C:\>conda activate vpy3.7

(vpy3.7) C:\>python
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
```
* 無事にpython3.7環境が作成できました。
* python2.7環境の作成は以下のようになります。
    * 環境作成時はどの仮想環境から実行しても問題ないです。

```
(vpy3.7) C:\>conda create --name vpy2.7 python=2.7
.
.
<省略>
・
・
(vpy3.7) C:\>conda info -e
# conda environments:
#
base                     C:\Users\xxxxxxx\AppData\Local\Continuum\miniconda3
vpy2.7                   C:\Users\xxxxxxx\AppData\Local\Continuum\miniconda3\envs\vpy2.7
vpy3.7                *  C:\Users\xxxxxxx\AppData\Local\Continuum\miniconda3\envs\vpy3.7

(vpy3.7) C:\>conda activate vpy2.7

(vpy2.7) C:\>python
Python 2.7.16 |Anaconda, Inc.| (default, Mar 14 2019, 15:42:17) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

## 仮想環境内でパッケージのインストール
* 通常パッケージ管理システムで`pip`を利用することが多いですが、conda環境内では`conda install`コマンドが推奨されています。
    * 私は`conda install`に対応していないパッケージは`pip install`で入れています。
* 現在の仮想環境内でインストール済みパッケージ一覧

```
(vpy3.7) C:\>conda list
# packages in environment at C:\Users\xxxxxx\AppData\Local\Continuum\miniconda3\envs\vpy3.7:
#
# Name                    Version                   Build  Channel
ca-certificates           2019.8.28                     0
certifi                   2019.9.11                py37_0
openssl                   1.1.1d               he774522_0
pip                       19.2.3                   py37_0
python                    3.7.4                h5263a28_0
setuptools                41.2.0                   py37_0
sqlite                    3.29.0               he774522_0
vc                        14.1                 h0510ff6_4
vs2015_runtime            14.16.27012          hf0eaf9b_0
wheel                     0.33.6                   py37_0
wincertstore              0.2                      py37_0
```
* `scipy`を追加する

```
(vpy3.7) C:\>conda install scipy
Collecting package metadata (current_repodata.json): done
Solving environment: done
・
・
<省略>
・
・
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
(vpy3.7) C:\>conda list
# packages in environment at C:\Users\xxxxxx\AppData\Local\Continuum\miniconda3\envs\vpy3.7:
#
# Name                    Version                   Build  Channel
blas                      1.0                         mkl
ca-certificates           2019.8.28                     0
certifi                   2019.9.11                py37_0
icc_rt                    2019.0.0             h0cc432a_1
intel-openmp              2019.4                      245
mkl                       2019.4                      245
mkl-service               2.3.0            py37hb782905_0
mkl_fft                   1.0.14           py37h14836fe_0
mkl_random                1.1.0            py37h675688f_0
numpy                     1.16.5           py37h19fb1c0_0
numpy-base                1.16.5           py37hc3f5095_0
openssl                   1.1.1d               he774522_0
pip                       19.2.3                   py37_0
python                    3.7.4                h5263a28_0
scipy                     1.3.1            py37h29ff71c_0
setuptools                41.2.0                   py37_0
six                       1.12.0                   py37_0
sqlite                    3.29.0               he774522_0
vc                        14.1                 h0510ff6_4
vs2015_runtime            14.16.27012          hf0eaf9b_0
wheel                     0.33.6                   py37_0
wincertstore              0.2                      py37_0
```
## 切り替えなしで指定した仮想環境でpythonを実行する
* 仮想環境を切り替えずにフルパスで実行することができます。
* 例えば`vpy2.7`環境で`hoge.py`を実行したい場合は以下のようになります。

```
C:\>conda info -e
# conda environments:
#
base                  *  C:\Users\xxxxxx\AppData\Local\Continuum\miniconda3
vpy2.7                   C:\Users\xxxxxx\AppData\Local\Continuum\miniconda3\envs\vpy2.7
vpy3.7                   C:\Users\xxxxxx\AppData\Local\Continuum\miniconda3\envs\vpy3.7

C:\> C:\Users\xxxxxx\AppData\Local\Continuum\miniconda3\envs\vpy2.7\python.exe hoge.py
```