【Windows・Ubuntu】Pythonの環境構築備忘録2020

# 最近のPython環境構築方法の動向
1. 公式
最新のバージョンは、2020年12月現在、3.9.1です。
公式のインストール方法は、大きくは変わっていないです。

2. Anaconda
以下の4種類があります。
大抵の人は、Individual Editionを使うと思います。
    - Commercial Edition
        - 7500を超える データサイエンス ／ Machine Learning のパッケージ
        - セキュリティと互換性に優れたすべてのAnacondaのパッケージを利用できる
        - $14.95/月
    - Team Edition
        - CVEレポート
        - ユーザー・アクセス・コントロール
        - $10,000～
    - Enterprise Edition
        - すべてそろってる
        - サポートあり？
        - 価格は相談
    - Anaconda Individual Edition
        - 個人用
        - 無料

3. pyenv
昔からある有名な環境構築ツールの一つです。  
**変化あり？（Windows）**
`libexec` フォルダが追加されたみたいです。
代わりに、 `shims` フォルダは途中から出現するようになったみたいです。

次の **Pipenv** との組み合わせがよさそうです。

4. Pipenv
最近注目されている環境構築ツールの一つです。
上記 **pyenv** との組み合わせがよさそうです。

5. その他
思ったよりたくさんの環境構築ツールがありました。
上記の環境構築ツールと合わせてまとめると、以下のようになります。

| 環境構築ツール名 | 説明 |
| :-- | :-- |
| Anaconda | データサイエンス向けディストリビューション |
| pyenv | 複数のPythonバージョンを切り替えるツール |
| virtualenv | プロジェクトごとにPython環境を切り分けるツール |
| pyenv-virtualenv | 切り分けた環境をPyenv上で選べるようにするPyenv用プラグイン |
| pyvenv | Python標準のvirtualenvラッパー(※ある記事によると非推奨らしいです) |
| python -m venv | Python標準のvirtualenvラッパー |
| Pipenv | Pythonプロジェクトの管理ツール |

参考：[Pythonにまつわるツールのまとめ](https://qiita.com/Aruneko/items/c63ed3f5770569fb5e11)

※最近の主流は、 **pyenv** と **Pipenv** になっているみたいです。
参考：[pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。](https://qiita.com/KRiver1/items/c1788e616b77a9bad4dd)



# 公式の環境構築方法
ここでは、pythonの公式サイト（python.org）からダウンロードしてインストールする方法を説明します。

## 対象ユーザー
とにかく、シンプルにPythonをインストールしたい人向け。

## メリット
- 一番簡単な構築方法なので、すぐに構築作業が終わる
- 公式の構築方法なので、無償かつ、商用利用可能
- exeのインストーラーを使って、グラフィカルに、ほとんど自動でPythonのインストールが可能
- 最新の Python バージョンをインストール可能

## デメリット
- 簡単な分、あとで必要なライブラリが増えると、手動のセットアップ作業も増える
- 複数の環境を同時に共存させられないので、環境ごとにPC(OS)を変えなければならない

## 構築手順
### Windows
  - OS：Windows10
  - Python：3.9.0  

まず、[Pythonの公式サイト](https://www.python.org/) > [Downloads](https://www.python.org/downloads/) > Download Python 3.9.0ボタン をクリックして、「python-3.9.0-amd64.exe」をダウンロードします。

python-3.9.0-amd64.exe を実行します。

表示された最初のウィンドウでインストールの方法を選択します。
おすすめは、以下の設定です。

  - Install launchar for all users (recommended) にチェック
  - Add Python 3.9 to PATH にチェック
  - Customize installation を選択  
![公式_002_e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/888362/75f83eab-dd12-dfe5-5938-8e18e8825038.png)

次の画面で Next をクリックします。

  - チェック項目はデフォルトで全て選択になっています
  - 必要に応じてチェックをはずします
  - 通常は、そのままで大丈夫でしょう

<br>
Advanced Options の画面で、必要な項目にチェックをつけて、Installをクリックします。
おすすめは、以下の設定です。

  - Install for all users
  - Associate files with Python (requires the py launcher)
  - Add Python to environment variables
  - Precompile standard library
  - Download debugging symbols
  - 「Customize install location」の例：C:\Python\Python39
![公式_003_e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/888362/38283b64-bef1-5884-8ca9-9b70fc9d28a1.png)


Setup Progress のウィンドウでインストールが完了するのを待ちます。

Setup was successful のウィンドウに遷移したら Close ボタンで閉じます。

コマンドプロンプトを起動して、 `python` を実行して、以下のような文章が表示されればインストール完了です。

```
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
```

あとは、 `pip` コマンドを利用して、必要なライブラリをインストールしていきます。


### Ubuntu
  - バージョン：20.04.1 LTS

上記環境には、すでに Python 3.8 がインストールされています。
python 3.9 をインストール・設定したい場合、以下の手順を参考にしてください。

パッケージ情報を更新

```bash
$ sudo apt update
```

Python 3.9 をインストール

```bash
$ sudo apt install python3.9
```

Pythonのバージョンを変更（以下は例）

```bash
$ update-alternatives --install /usr/bin/python3 /usr/bin/python3.9 1
```
参考：[UbuntuでPythonのバージョンを変更する方法](https://codechacha.com/ja/change-python-version/)

Pythonのバージョンを確認

```bash
$ python3 -V
```

`Python 3.9.0+` のように表示されれば設定完了

このままだと、 pip がない状態なので、 pip をインストールします。

```bash
$ sudo apt install python3-pip
```

最後に、 `pip3 list` を実行して、インストールされている python のライブラリのリストが表示されれば、準備完了です。


# Anacondaの環境構築方法
ここでは、個人用で無料の Individual Edition を想定して説明します。
また、 Anaconda のインストール部分を中心に説明します。
　※データサイエンス分野の環境構築については、 [こちら](https://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c) の環境構築の記事が参考になります。

## 対象ユーザー
以下のような方におすすめします。

- 個人であり、無料で環境構築したい人
- 複数のPythonの環境を共存させたい人
- Pythonで機械学習をはじめとするデータサイエンス分野の環境を構築したい人
- Pythonをベースとして、画像処理に特化した OpenCV を手軽に環境構築したい人

## メリット
- 複数の環境を同時に共存させられる
- 個人利用であれば、無料
- データサイエンス分野の環境を手軽に構築することができる
- Pythonで画像処理をするための OpenCV の環境が手軽に構築できる
- GUI を利用してグラフィカルに Anaconda 自体・Python の環境をインストール・構築できる

## デメリット
- 商用利用の場合は費用がかかる（$14.95/月）
- 他の環境構築方法と比べて、ベース環境のインストール（初期インストール）に時間がかかる

## 構築手順
### Windows
- Windows 10
- Anaconda3 (Python 3.8)
- Individual Edition

Anaconda の [Individual Edition](https://www.anaconda.com/products/individual) > 「Download」ボダンをクリック > ページ内移動後の Windows の部分 > 64-Bit（32bit） Graphical Installer をクリック で exe ファイル（例：Anaconda3-2020.11-Windows-x86_64.exe）をダウンロードします。

exe ファイルを実行します。

インストールのウィンドウが表示されるので、OS を再起動したくなければ、他のアプリケーションを終了しておきます。

ライセンス契約の文章を確認して、「I Agree」ボタンをクリックします。

インストールのタイプを選択する画面で、PC上の今アクティブなユーザー（自分）だけにインストールするか、全てのユーザーにインストールするかを選んで、「Next >」ボタンをクリックします。
（ここでは、全てのユーザー（All Users）を選択しています。）

インストールする場所を指定するウィンドウが表示されるので、任意のインストール場所を設定します。
（例：C:\Python\Anaconda3\）

デフォルトで「Register Anaconda3 as the system Python 3.8」にのみチェックがついているので、内容を確認してそのまま「Install」ボタンをクリックします。
（システム環境変数 (PATH) に Anaconda3 を設定するのは、 Anaconda3 のアンインストール時に問題を引き起こす可能性があるので、お勧めしません。）
![Anaconda_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/888362/58c250e4-cf53-55ee-e781-dc20df617b75.png)


インストールの進捗バーが表示されるので、インストール処理が終了するまで待ちます。

インストール処理が終わったら、「Next >」ボタンをクリックします。

PyCharm のダウンロードのお知らせページで「Next >」ボタンをクリックします。

インストール完了のウィンドウが表示されたら、全てのチェックを外して「Finish」ボタンをクリックします。

次に、環境変数の設定をします。
コントロールパネル > ユーザーアカウント > ユーザーアカウント > 環境変数の変更 をクリックします。
（ここでは、あえてユーザーアカウントから設定する手順を踏んで、システム環境変数を編集しないようにしています。）

ユーザー環境変数 > Path を選択して、「編集」ボタンをクリックします。

「新規」ボタンをクリックして、 Anaconda の関連する以下のフォルダを追加します。

- （例）「C:\Python\Anaconda3」
- （例）「C:\Python\Anaconda3\Scripts」
- （例）「C:\Python\Anaconda3\Library\bin」  
この際、古い Anaconda のフォルダが登録されていたら、そのパスを削除しておきます。（エラー回避のため）

最後に、適切にインストールされたかを確認します。
コマンドプロンプトを起動して、 `conda -V` と入力して実行します。
`conda 4.9.2` というように Anaconda のバージョンが表示されます。
続いて、 `conda env list` と入力して実行します。
以下のように、思った通りのパスが表示されればインストール完了です。

```
# conda environments:
base                  *  C:\Python\Anaconda3
```


### Ubuntu
- バージョン：20.04.1 LTS
- Anaconda3 (Python 3.8)
- Individual Edition

※**注意事項**：
> anaconda単独だと実は問題があります。
> curlやsqlite3,opensslなどを一緒にインストールして動作をのっとります。

参考：[データサイエンティストを目指す人のpython環境構築 2016](https://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c#linux%E3%81%AE%E5%A0%B4%E5%90%88)

上記の記事にもあるように、 Linux の場合は他のソフトの動作をのっとることがあるようです。
このような予期せぬ動作を防ぐために、 pyenv を経由することが推奨されています。
上記の記事の環境構築方法をそのまま参考にして、まずは pyenv をインストールします。  

```bash
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
```

次に、 Anaconda をインストールします。
（今や、 Python 3.8 が登場していて、 Anaconda は 3系しかないです。）

```bash
# 最新版を確認。
$ pyenv install -l | grep ana

# 2020年12月現在、 anaconda3-2020.07 が最新
# 以下の一行の実行完了には少し時間がかかります。 (Installed Anaconda～ が表示されれば、インストール完了です。)
$ pyenv install anaconda3-2020.07
$ pyenv rehash

# anacondaをメインのpythonに設定。
$ pyenv global anaconda3-2020.07

# activateがpyenvとanacondaでバッティングするので、pathに明示しておく。
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2020.07/bin/:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

#念のためconda自体をアップデートしておく。
$ conda update conda
```

※**注意事項**：
> `$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2020.07/bin/:$PATH"' >> ~/.bashrc`
> には副作用があって、pyenv globalやpyenv localをいっさい受け付けずに、常にanacondaを使うようになります。
> anaconda以外も使う人や、主に `pyenv local` で運用したい人などは、Pathに記載するのをやめてcondaのactivateをフルパスで入れる必要があります。
> `source ~/.pyenv/versions/anaconda3-2020.07/bin/activate <環境名>`
> 環境を頻繁に切り替えないでanacondaだけでやっていく人はpathに明示した方がよいと思います。

参考：[pyenvとanacondaを共存させる時のactivate衝突問題の回避策3種類](https://qiita.com/y__sama/items/f732bb7bec2bff355b69)

最後に、適切にインストールされたかを確認します。
端末を起動して、 `conda -V` と入力して実行します。
`conda 4.9.2` というように Anaconda のバージョンが表示されます。
続いて、 `conda env list` と入力して実行します。
以下のように、思った通りのパスが表示されればインストール完了です。

```
# conda environments:
#
base                  *  /home/[ユーザ名]/.pyenv/versions/anaconda3-2020.07
```


# pyenv + Pipenv の環境構築方法（参考。考古学的構築方法）
ここでは、~~最近のPythonの環境構築方法で主流となっているらしい、~~ **pyenv** と **Pipenv** を組み合わせた方法を説明します。
ここでの説明は、最新の利用方法とは言えないので、あくまで考古学的な構築方法として参考にしてください。

## 対象ユーザー
以下のような方を想定しています。

- 個人であり、無料で環境構築したい人
- 複数の Python の環境を共存させたい人
- Python でデータサイエンス分野を主な開発分野としていない人
- 軽い動作の Python 開発環境を構築したい人

## メリット
- 複数の環境を同時に共存させられる
- オープンソースなので制限なく無料
- Anaconda と比べて比較的動作が軽い
- 必要なライブラリだけ追加していくので、保存領域を無駄に使わない
- 最新の Python バージョンをインストール可能

## デメリット
- 必要なライブラリが大量にある場合、インストール時のコマンドが長くなる
- 事前にライブラリのバージョンの互換性を把握しておかなければならない
- コマンド操作なので、操作には慣れが必要

## 構築手順
### Windows
- Windows 10
- pyenv-win (version: 2.64.3)

※**注意**：公式の pyenv は Windows に対応していません。
> そのため、今回は 3rdパーティー のツール pyenv-win を利用します。
> このツール、 本家pyenv と異なり Anaconda の管理はできませんが
> Python だけなら同じ感覚で管理可能です。

参考：[Windows10(非WSL)にpyenv+pipenv環境構築](https://qiita.com/foewhoew32f320/items/2889d0e0bbb7b68309a5)

はじめに、 Linux の pyenv と同じように、ホームディレクトリ(デフォルトは `C:\User\ユーザー名\` の配下)に、 `.pyenv` フォルダを用意してリポジトリをクローンします。

```
git clone https://github.com/pyenv-win/pyenv-win.git %USERPROFILE%/.pyenv
```
(git が未導入の場合はリポジトリをダウンロードして配置しましょう)
　→ [pyenv-win の公式サイト](https://github.com/pyenv-win/pyenv-win)

次に、環境変数の設定をします。
ユーザー環境変数 `PYENV` と `PYENV_HOME` がなければ、新規作成して、 **クローンしたフォルダのパス** を設定します。
　※ **メモ** ： `PYENV_HOME` は Pipenv をサポートするための環境変数です。

**ユーザ環境変数の設定方法**：
`コントロールパネル > ユーザーアカウント > ユーザーアカウント > 環境変数の変更` をクリックします。
（ここでは、あえてユーザーアカウントから設定する手順を踏んで、システム環境変数を編集しないようにしています。）
`ユーザー環境変数 > PYENV` と、 `ユーザー環境変数 > PYENV_HOME` を新規作成 or 編集します。
クローンしたフォルダのパスを設定します。

```
%USERPROFILE%\.pyenv\pyenv-win
```

続いて、 `Path` に、 `bin` フォルダと `libexec` フォルダのパスを追加します。
　※ **注意** ：上記2つのフォルダのパスの設定は、 `%USERPROFILE%\AppData\Local\Microsoft\WindowsApps` よりも上位に設定してください。もし下位に設定した場合は Windows 側が Python がないとみなして Microsoft store の Python を勧めてくるそうです。

```
%USERPROFILE%\.pyenv\pyenv-win\bin
%USERPROFILE%\.pyenv\pyenv-win\libexec
```

コマンドプロンプトを開いていたら閉じて、再起動して、 `pyenv --version` を実行してください。
以下の3パターンがあります。
1. `pyenv 2.64.3` というようにインストールされた pyenv のバージョンが表示されれば、正常ですので、そのまま次に進んでください。
2. コマンドが見つかりません、というようなエラーが表示された場合は、これまで設定した環境変数が正しいか確認してください。
3. コマンドが見つかりません、というようなエラー表示、かつ、 Visual Studio Code かその他の IDE のターミナルを使っていた場合は、再起動して再度実行してみてください。

ホームディレクトリ(デフォルトは `C:\User\ユーザー名\` の配下)で `pyenv rehash` を実行してください。
　※エラーになった場合は、これまでの手順を再度見直してください。（それでも解決しなければ [こちら](https://github.com/pyenv-win/pyenv-win/issues) を確認してください）

`pyenv` を実行してください。 pyenv がサポートしているコマンドのリストが表示されれば、 pyenv のインストールは完了です。

pyenv のインストールが完了したら、 pyenv の初期設定を行います。

**＜ pyenv の初期設定 ＞**
確認できる Python のバージョンのリストを更新します。

```
pyenv update
```
※少し時間がかかります。（1～3分）

pyenv windows (pyenv-win) がサポートしている Python のバージョンのリストを確認します。

```
pyenv install -l
```
※ `pyenv update` で更新したリストが一気に表示されます。

上記で確認したリストの中から、インストールしたい Python のバージョンを指定して、 Python をインストールします。
（例）：

```
pyenv install 3.9.1
```
※インストール中は、随時メッセージが表示されます。その際、質問が表示されることがあるので、そのまま Enter キーを押下していきます。（デフォルトの選択肢から変更しなくてもインストールできます。必要に応じて選択肢を変更してください。）
※ `pyenv install` に `-q` オプションを付けることで、インストール中のいらないメッセージ、質問を非表示にしてインストールすることも可能です。 (*quite installation*)
※1つのコマンドで複数のバージョンを一度にインストールすることも可能です。（例： `pyenv install 2.7.18 3.9.1` ）

pyenv の Python のグローバルバージョンを設定するには、以下を実行します。
（例）：

```
pyenv global 3.9.1
```

pyenv の Python のローカルバージョンを設定するには、以下を実行します。
（例）：

```
pyenv local 3.9.1
```

pip コマンドでライブラリを (アン)インストールしたとき、もしくは、バージョンのフォルダの中のファイルを変更したときは pyenv 自体をアップデートするため、以下を実行します。

```
pyenv rehash
```
※上記コマンドは、 *`.pyenv`* フォルダーの外部で実行しなければなりません。

pyenv が管理している Python について、現在のフォルダにどの Python バージョンが設定されているかは `pyenv version` で確認、 pyenv のシステムにインストールされているすべての Python バージョンを表示するには `pyenv versions` を実行します。
※公式(pyenv-win)のその他の情報は[こちら](https://github.com/pyenv-win/pyenv-win#pyenv-for-windows)を確認してください。

Python 関連のコマンド(python 自体、 pip など)が動くよう Path を再度設定します。**（※最新情報）**
`C:\User\ユーザー名\.pyenv\pyenv-win` の中に `shims` フォルダが作成されています。
このフォルダのパス( `%USERPROFILE%\.pyenv\pyenv-win\shims` )をコピーして、これまでと同じようにコントロールパネルから `ユーザー環境変数 > Path` の設定まで移動して、 コピーしたパスを `%USERPROFILE%\AppData\Local\Microsoft\WindowsApps` よりも上位に設定します。

Python の動作確認を行います。
コマンドプロンプトを再起動してください。

```
python --version
```
上記のコマンド実行後、 `Python 3.9.1` というようにインストール・設定した Python のバージョンが表示されれば問題ありません。 Python 自体のインストールは完了です。

#### pyenv の Python が正常にインストール・設定できていない場合 (原因候補1)
過去に Anaconda をインストールして Path の設定をしていたことが弦だと思われます。
以下のように確認・修正してください。
1. `コントロールパネル > ユーザーアカウント > ユーザーアカウント > 環境変数の変更` をクリック
2. `ユーザー環境変数 > Path` を選択
3. `編集` をクリック
4. 表示された環境変数の一覧を確認し、 `C:\Python\Anaconda3` 、 `C:\Python\Anaconda3\Scripts` のような古い Anaconda のパスが残っている場合は該当のパスを選択し `削除` ボタンをクリック
5. 念のため Windows を再起動

#### pyenv の Python が正常にインストール・設定できていない場合 (原因候補2)
過去に [Python公式](https://www.python.org/) から Python をダウンロード・インストールしていたことが原因だと思われます。
以下のように確認・修正してください。
1. `コントロールパネル > システムとセキュリティ > システム > システムの詳細設定 > 環境変数` をクリック
2. `システム環境変数 > Path` を選択
3. `編集` ボタンをクリック
4. 表示された環境変数の一覧を確認し、 `C:\Python\Python39\Scripts\` 、 `C:\Python\Python39\` のような古い Python のパスが残っている場合は該当のパスを選択し `削除` ボタンをクリック
5. 念のため Windows を再起動
※ **注意** ：上記の修正では、システム(OS)が参照している重要なパスも表示されています。これらのパスは **絶対に削除しないでください** 。他のアプリケーションや、最悪、 **Windows 自体の動作** にも影響しかねません。落ち着いて冷静に設定してください。

**＜ Pipenv の導入 ＞**
まずは、 `pip` コマンドを用いて、 Pipenv をインストールします。

```
pip install pipenv
```

`Successfully installed ～` が表示されればインストール自体は終わっています。
ただし、ここで注意する点は、今回 **公式なpyenvではなく3rdパーティーのツールを使っている** ことです。
このため、このままだと `pipenv` コマンドが認識されません。
今回、 [こちら](https://qiita.com/foewhoew32f320/items/2889d0e0bbb7b68309a5#%E6%89%8B%E9%A0%862-pipenv%E5%B0%8E%E5%85%A5) のサイトを参考に `pipenv` コマンドを設定しました。

`C:\User\ユーザー名\.pyenv\pyenv-win\shims` 配下の以下の2ファイルを、コピー&ペーストします。（方法はお任せします。私は、エクスプローラー上で `Ctrl + C` 、`Ctrl + V` を用いました。）
`pip`
`pip.bat`

コピペした2ファイルを、ファイル名が対応するように以下の名前にリネームします。
`pipenv`
`pipenv.bat`

最後に正しく設定できたか確認します。
コマンドを実行して、以下のように表示されれば Pipenv の環境構築は完了です。

```
C:\>pipenv --version
pipenv, version 2020.11.15
```


### Ubuntu

# まとめ

# 参考文献
- [Python公式](https://www.python.org/)
- [Anaconda公式](https://www.anaconda.com/)
- [pyenv公式](https://github.com/pyenv/pyenv)
- [Anacondaの製品と価格の情報](https://www.anaconda.com/pricing)
- [UbuntuでPythonのバージョンを変更する方法](https://codechacha.com/ja/change-python-version/)
- [pyenv と vertualenv による Python の開発環境の構築](https://bi.biopapyrus.jp/python/pyenv.html)
- [pyenvのインストール、使い方、pythonのバージョン切り替えできない時の対処法](https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b)
- [Windows10(非WSL)にpyenv+pipenv環境構築](https://qiita.com/foewhoew32f320/items/2889d0e0bbb7b68309a5)
- [Pythonにまつわるツールのまとめ](https://qiita.com/Aruneko/items/c63ed3f5770569fb5e11)
- [pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。](https://qiita.com/KRiver1/items/c1788e616b77a9bad4dd)