【Python】お手軽に複数バージョンの環境構築 for Windows

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-173909559-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'UA-173909559-1');
  ga('create', 'UA-173909559-1', 'auto'); // 2.トラッカー生成
  ga('send', 'pageview'); // 3.最初のページビューを送信
</script>
<!-- End Google Analytics -->

python開発環境を構築する場合、anacondaやjupyterlab等を使う事が多い。しかしながら、筆者はターミナル実行が大好きなためanacondaやjupyterlab等を使用していない。
本記事では、そのような方に向けてpythonの開発環境の整備の仕方やpython2系、python3系など複数の実行環境を使い分ける方法を共有致します。
友人からこの方法を聞かれることが多かったため、今回記事にまとめました。

# 開発環境
- Windows10 Home (64bit)

# pythonのインストール
まずは以下よりpythonのIDEをインストールしてください。
※この際、インストールしたディレクトリをちゃんと覚えといてください。
カスタムインストールならば、インストール先を明示的に選べるのでオススメです。
Cドライブの見やすいところなどにインストールしましょう。
- [python-2.7.18.amd64-installer](https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi)
- [Python3.6.8-amd64-webinstall](https://www.python.org/ftp/python/3.6.8/python-3.6.8-amd64-webinstall.exe)
- [python-3.7.8-amd64-webinstall](https://www.python.org/ftp/python/3.7.8/python-3.7.8-amd64-webinstall.exe)

# 実行環境の整備
以降の説明では、インストーラーで指定したインストール先が`C:`直下であると仮定して説明をします。違う場所にインストールしている場合は、適宜読み替えて頂くか、アンインストールして`C:`直下にインストールし直してください。
## 実行ファイル(python.exe)の名称変更
`C:`に`Python27`、`Python36`、`Python37`のようなフォルダが有ると思います。まずは、各[ディレクトリ](https://www.pc-master.jp/words/directory.html)の中に入ってください。すると、各ディレクトリで`python.exe`という実行ファイルを見つけることが出来ます。
この名前を変えることで、簡単に複数の実行環境の整備を行う事が出来ます。
例えば、
- Python2.7の場合：`python.exe`→`python2.exe`
- Python3.6の場合：`python.exe`→`python3.exe`
- Python3.7の場合：`python.exe`→`python37.exe`
※以降、この記事では各バージョンの実行ファイルを上記のように命名したと仮定して説明を続ける。

## pathの設定
実行ファイルの名前を変えただけではグローバルな開発環境を構築することはできません。
名前を変更したEXEファイルがどこでも利用できる様、PATHを追加する必要があります。（※インストーラーで「pathを追加」にチェックを入れていた人は必要ないと思われます。）
PATHの追加方法については以下記事等を参照してください。
[PATHの追加方法](https://nw.tsuda.ac.jp/lec/win10/path/)

上記方法を参考にして、以下のPATHを追加してください。
既に存在している場合、追加しなくて良いです。

- Python2.7の場合：`C:\Python27\`、`C:\Python27\Scripts`
- Python3.6の場合：`C:\Python36\`、`C:\Python36\Scripts`
- Python3.7の場合：`C:\Python37\`、`C:\Python37\Scripts`

これを行う事で先程の実行ファイルとpythonのライブラリがどこでも呼び出せるようになります。
ここで一応、再起動してください。PATHの更新が狙い。

## 動作確認
それでは、実際に各バージョンのpythonが起動するか確かめてみましょう。
まずは、ターミナルを立ち上げてください。使用するターミナルはコマンドプロンプトでもPowerShellでも構いません。個人的にはLinuxコマンドが幾つか使えるPowerShellが好きです(^^)。
立ち上げ方が分からない方は`Winキー＋R`を押して、`cmd`や`PowerShell`と入力し、Enter。

ターミナルが起動後、先程命名した実行ファイルの名前（.exeは省く）`python2`、`python3`、`python37`を入力して下さい。
無事、各バージョンのpythonが立ち上がれば成功です。
以下、実行例。

```
PS C:\> python2
Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
PS C:\> python3
Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information. 
>>> exit()
PS C:\> python37
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit() 
```

# ライブラリのインストール by pip
さて、無事にpythonの実行環境を複数構築することが出来ました。
今度は各バージョンごとに[モジュール](https://qiita.com/Usek/items/86edfa0835292c80fff5)をインストールする方法をご紹介します。
と言ってもやることは簡単です。
モジュールのインストールにはpipを使用します。
以下、コマンドをターミナル上で実行すればOKです。

- Python2.7の場合：`python2 -m pip install <module-name>`
- Python3.6の場合：`python3 -m pip install <module-name>`
- Python3.7の場合：`python37 -m pip install <module-name>`

これで各実行環境に対してのモジュールのインストールが出来るようになりました。
後は、pythonで色んなコード、プログラムの開発を好きに進めてください！

## インストールの小ネタ
### powershellとシェルスクリプトの活用
ある程度、pythonを使用していると自分がよく使うライブラリを理解してくると思います。
新たな環境を構築する際にわざわざ手動で行うのも効率が悪いので自動化してしまいましょう。GitHubにリポジトリを作っておくという方法もあるかもしれませんが、ここでは[シェルスクリプト](https://qiita.com/zayarwinttun/items/0dae4cb66d8f4bd2a337)を活用した方法をご紹介します。
Windows PowerShellでは.ps1というwindows環境でのシェルスクリプトを作成することが出来ます。基本的な考え方はLinuxのシェルスクリプトと同様です。
シェルスクリプトに関する内容はたくさんの方々がまとめているので、そちらを参照してください。[Linux コマンド一覧表](https://qiita.com/savaniased/items/d2c5c699188a0f1623ef)、[シェルスクリプト入門 書き方のまとめ](http://motw.mods.jp/shellscript/tutorial.html)。

PowerShellの例はこんな感じです。
以下のように1つのシェルスクリプトにまとめておけば、1度でモジュールの整備を行う事が出来るので非常に便利です。

```powershell
function my_echo($msg){
	echo ""
	echo $msg
	echo ""
}
function py_pip_upgrade(){
	python2 -m pip install --upgrade pip
	python3 -m pip install --upgrade pip
	python37 -m pip install --upgrade pip
	my_echo("Finish upgrade pip")
}
function py_pip_inst($lib){
	python2 -m pip install $lib
	python3 -m pip install $lib
	python37 -m pip install $lib
	my_echo("Finish install $lib")
}

py_pip_upgrade("")
py_pip_inst("numpy")
py_pip_inst("matplotlib")
py_pip_inst("csv")
py_pip_inst("opencv-python")
py_pip_inst("opencv-contrib-python")
py_pip_inst("pandas")
py_pip_inst("datetime")
py_pip_inst("py2exe")
py_pip_inst("requests")
py_pip_inst("scipy")
py_pip_inst("pygame")
python3 -m pip install pyinstaller
```