Windows での Python 環境構築から実行までのあれこれ

Python の環境構築時に、「認証プロキシ設定も、共存環境も、実行確認も必要」となり色々な記事を渡り歩いたので、 1 つに纏っていると良いなと思い投稿します。

# はじめに
## 内容
当記事で紹介する内容は以下です。認証プロキシや共存環境構築は必要に応じて読み飛ばして下さい。

* Anaconda のインストール (Windows)
* 認証プロキシの設定
* 異なるバージョンの共存環境構築
* 対話モードでプログラムを実行
* Python スクリプトを実行

## 誰向けか
以下の何れかに当てはまる Python 初学者向けです。

* 会社の PC (Windows) で Python を使う必要が出てきた
* Python2 と 3 両方使用する等、**異なるバージョンを共存**させたい
* サクッと**環境構築から実行確認まで**をしたい 


# 環境
動作確認済の環境は以下のとおりです。

* Windows10(64bit) Version 1607 
* Anaconda 4.4.0 Python 3.6 Version
* Python 3.6.1 と Python 2.7.13



# 手順
## Anaconda のインストール
* [ダウンロードサイト](https://www.continuum.io/downloads)から対象 OS に対応するインストーラをダウンロードします。
(※) Python2 系メインの人でも、3 系のインストーラで OK。

* インストールした exe をキックし、インストールを進めます。
__「環境変数PATHへ追加する」にチェックを入れる__以外はデフォルト設定のままで OK です。

![Anaconda.PNG](https://qiita-image-store.s3.amazonaws.com/0/147552/cde093cf-f98e-20f6-ea5d-7a369484a092.png)




## インストール時の設定情報確認
* スタートメニューにある Anaconda Prompt を起動します。

![AnacondaPrompt.png](https://qiita-image-store.s3.amazonaws.com/0/147552/e1d4c1e4-c5b6-042b-799e-009be0889129.png)

* 以下のコマンドより存在する環境の確認を行います。現在動作している環境には " * " が表示されます。

```py
C:\Users\ユーザ名 >conda info -e

# conda environments:
#
root                  *  C:\Users\ユーザ名\Anaconda3
```

* ```python``` と入力し、現在動作している環境の Python のバージョンを確認します。  
以下より、Python 3.6.1 であることが確認できます。

```py
C:\Users\ユーザ名 >python
Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
```


* 以下を入力し、対話モードを一度抜けます。

```py
>>>exit() 
```


## 認証プロキシ設定

(※) 認証プロキシ環境下の方は、先に認証を通さないと「共存環境の構築」が実行出来ません。

* Anaconda3 の HOME ディレクトリ (通常は ```C:\Users\ユーザ名\Anaconda3```) 直下に設定ファイル ```.condarc``` を作成します。  
```.condarc``` にプロキシ認証に使用する「ユーザ名」「パスワード」「IPアドレス」「ポート番号」を以下の通り記述します。[^1]

```yaml
proxy_servers:
    http: http://ユーザ名:パスワード@IPアドレス:ポート番号
    https: https://ユーザ名:パスワード@IPアドレス:ポート番号
```

(※) 直接作成出来ない場合は適当なテキストファイルを作成し、以下を実行して下さい。

```py
# Anaconda3 の HOME ディレクトリに移動してから実行
C:\Users\ユーザ名\Anaconda3 >ren <テキストファイル名> .condarc
```

* 以下のコマンドを実行して設定が反映されているか確認します。

```py
C:\Users\ユーザ名 >conda config --show

add_anaconda_token: True
...

proxy_servers:
  http: http://ユーザ名:パスワード@IPアドレス:ポート番号
  https: https://ユーザ名:パスワード@IPアドレス:ポート番号

...
verbosity: 0
```

## 異なるバージョンの共存環境構築

* 今回は例として、Python2.7 系の環境を共存させます。まずは、以下のコマンドを実行します。  
末尾に ```anaconda``` を付与すると、Anaconda インストール時に自動で含まれるライブラリを引き継いでくれます。[^2] 

```py
# 2.7 系の Python 実行環境を、「py27」という名称で作成
C:\Users\ユーザ名 >conda create -n py27 python=2.7 anaconda
```

* 「py27」という名称で環境が出来たことを確認します。

```py
C:\Users\ユーザ名 >conda info -e

# conda environments:
#
py27                      C:\Users\ユーザ名\Anaconda3\envs\py27
root                  *  C:\Users\ユーザ名\Anaconda3
```


* ```activate``` コマンドより Python2 用の環境に入ります。[^3] 

```py
C:\Users\ユーザ名 >activate py27
(py27) C:\Users\ユーザ名 >
```

* ```python``` と入力して Python のバージョンを表示し、環境が切替わっていることを確認します。

```py
(py27) C:\Users\ユーザ名 >python
Python 2.7.13 |Continuum Analytics, Inc.| (default, May 11 2017, 13:17:26) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>>
```

## 対話モードでプログラムを実行

* 2 系の環境に入ったまま、対話モードで "Hello, world!" と表示してみます。  
  ```print('Hello, world!')``` と入力して下さい。

```py
>>> print('Hello, world!')
Hello, world!
>>>
```
"Hello, world!" と表示されることが確認できました。

## Python スクリプトを実行

* 以下を入力し、対話モードを一度抜けます。

```py
>>>exit() 
```

* 以下の Python スクリプトを用意し、適当なディレクトリに保存ます。

```helloWorld.py
print('Hello, world!')
```

* 以下を実行し、"Hello, world!" と表示されることを確認します。  
 ```<スクリプトの格納先>```には、先程作成したスクリプトのパスを入れて下さい。

```py
(py27) C:\Users\ユーザ名 >python <スクリプトの格納先>\helloWorld.py
Hello, world!

(py27) C:\Users\ユーザ名 >

```

* ```deactivate``` コマンドより 2 系の環境を抜けます。

```py
(py27) C:\Users\ユーザ名 >deactivate py27

C:\Users\ユーザ名 >
```

* ```python``` と入力し環境が切り替わっていることを確認します。

```py
C:\Users\ユーザ名 >python
Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

以上で Python2 系の動作確認は完了です。
上記に続けて 3 系でも同様に「対話モードでプログラムを実行」「Python スクリプトを実行」すると動作確認が出来ます。[^4]

# おわりに
当記事では以下の内容を紹介しました。

* Anaconda のインストール
* 認証プロキシの設定
* 異なるバージョンの共存環境構築
* 対話モードでプログラムを実行
* Python スクリプトを実行

インストール ~ 実行確認まで非常に簡単だったと思います。

Java を主に使っていた自分としては、異なるバージョンの共存環境構築が簡単すぎて驚きました。

## 補足(共存環境構築について)

異なるバージョンの共存環境を構築した際の以下のコマンドに関連して、何点か補足します。

```py
C:\Users\ユーザ名 >conda create -n py27 python=2.7 anaconda
```
### バージョン指定
* ```python=``` で指定するバージョンは、3.X 系ももちろん OK です。
* ```python=``` でマイナーバージョンを指定しないと対象系の最新版がインストールされます。
* [Anaconda のライブラリ](https://repo.continuum.io/pkgs/free/win-64/)にないバージョンを指定すると、以下のメッセージが出力されます。

```py
C:\Users\ユーザ名 >conda create -n py21 python=2.1
Fetching package metadata ...........

PackageNotFoundError: Package missing in current win-64 channels:
  - python 2.1*
```

* 2017/08/11 時点で確認した指定出来るマイナーバージョンは以下の通りでした。

|系|指定できるバージョン|
|:--|:--|
|2.5以前|なし|
|2.6|2.6.8、2.6.9|
|2.7|2.7.3  ~ 2.7.13|
|3.1|なし|
|3.2|なし|
|3.3 以降|基本的にどれも OK|

### 作成した環境の削除
* 作成した環境を削除したい場合は以下のコマンドを実行します。

```py
C:\Users\ユーザ名 >conda remove -n <環境名> --all
```

## 参考
* [Anaconda → Jupyter Notebook使ってみる \| Mega\-Takoyakiの胃が痛い](http://beer.tank.jp/anaconda-%E2%86%92-jupyter-notebook%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B)
* [データサイエンティストを目指す人のpython環境構築 2016 \- Qiita](http://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c)
* [Anaconda で Python 環境をインストールする \- Qiita](http://qiita.com/t2y/items/2a3eb58103e85d8064b6)
* [AnacondaをWindowsにセットアップ – ぷろぐらむノート](http://note.websmil.com/develop/anaconda%E3%82%92windows%E3%81%AB%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97)
* [Proxy下のWindowsでPython\(Anaconda\)環境を整える \- Qiita](http://qiita.com/mishan88/items/2f9e1c5e9e2572ba8a36)
* [Configuration — Conda documentation](https://conda.io/docs/config.html)
* [Python 2\.7\.x と 3\.x の決定的な違いを例とともに \| プログラミング \| POSTD](http://postd.cc/the-key-differences-between-python-2-7-x-and-python-3-x-with-examples/)

[^1]: ユーザ/パスワード認証が不要な場合は @以前を削除して下さい。

[^2]: 末尾に ```anaconda``` を付与しない場合は、自身で ```conda install``` 等で後にインストールします。```conda list``` で既に何がインストールされているか確認できます。

[^3]: Mac や Linux だと ```source activate```
[^4]: ```print``` は 2 系と 3 系で大きく動作が異なりますが、当記事では両環境下で動作する書き方を紹介しています。