python環境を救いたい(PyCharmの設定)


# はじめに

これまでPythonだとAnacondaを使っていました、（脳死なので）

ただ、このままだと以下のようなデメリット事項が多く発生します。

- 機械学習用のライブラリのバージョンを変えることができない
- サイズ容量を食う
- なんかつまらない


というわけでキレイにするためにPython環境を作り変えて

Anaconda -> PyCharm + pyenv + pyenv-virtualenv環境に変更しまいた


# Anacondaの削除

Anacondaの削除ですが

https://weblabo.oscasierra.net/python-anaconda-uninstall-macos/

のサイトや

https://qiita.com/nemui_/items/210d297493ff176d31fe

のサイトを参考にすると良いです。

特に引っかかる点はない感じです。

## sourceコマンド

よくsourceコマンドが記事にでてきますが、
これは、変更した.bash_profileをもう一度読み込むコマンドです。
よって、ターミナル・Bashを一度閉じて再起動すれば使わなくてよいかと思います。


# pyenvのインストール

Pyenvは、Pythonのバージョン、

例えば

- 2.7.0
- 3.6.4
- 3.6.3
- Anaconda3-5.1.1

など、それぞれのバージョンを任意に切り替えれるようにしてくれるパッケージです。
嬉しいですね。


Macだと

```
brew install pyenv
```

でインストールでき、おそらくインストールした時点でPATHも通ると思います。

## pyenvのPython実行環境の追加

pyenvではpythonの実行環境を追加できます。

```
pyenv install --list
```
と打ち込めば、Pyenvの現在インストールできるリストを取得できるため、

```
pyenv install 3.5.3
```
などとするとそのバージョンのPythonをインストールできます。

## pyenvの切り替え

インストールした後はpyenvの実行環境を入れ替えましょう。

```
pyenv versions
```
と打ち込むと

```  
system
* 3.6.0 (set by /usr/local/var/pyenv/version)
  3.6.0/envs/kerasenv
  kerasenv
```
のように現在インストールされているものが表示されます。

そこで

```
pyenv local 3.6.0
```

とすると、現ディレクトリ以下がこの3.6.0のバージョンになります。

また、

```
pyenv global 3.6.0
```
とすると環境全部がこのバージョンになります。

# virtualenvのインストール

virtualenvは, pyenvと異なり
「あるバージョンのPython下で、**プロジェクトごとにpipモジュールを変えるため**」のツールです。

例えば、DeepLearningをやりたい！というときは
pyenvで指定した3.6.3のpythonを利用して、virtualenvで一個仮想的な3.6.3の実行環境を作り、その中でpipモジュールインストールを行います。


このようにする利点として
ともに3.6.3のPythonを使いたいとしても

強化学習用のディレクトリ
と
画像識別用のディレクトリで
使用するKerasのバージョンが異なる！などがあります。

そのため、あるPythonのバージョンの元で、仮想的な実行環境が作れると便利、そしてそのツールがvirtualenvです。

インストールですが

```
brew install pyenv-virtualenv
```

を利用します。
書籍によっては

```
brew install virtualenv
```

とありますが、現在はvirtualenvはpyenvのプラグインとして開発されているようです。

（ただ、現在はPython公式がvenvとしてvirtualenvを再開発しているので、そのうちvirtualenvが使われなくなるのかな、というイメージです）


## virtualenvによる環境切り分け

pyenvでインストールした3.6.0のPython3で、デスクトップ上に
Kerasを実行するための環境構築を考えてみます。

まず、DesktopにKerasという名前のフォルダを作って移動しましょう。

```bash

cd ~/Desktop
mkdir Keras
cd Keras
```

その後、このフォルダ用の仮想環境を作成します。

```
pyenv virtualenv 3.6.0 keraspy
```
としてみます。

これは、virtualenvでpython3.6.0バージョンを利用し、keraspyという名前で新しく環境を作ってくれな！
という意味です。

そして、このKerasディレクトリ以下でこの環境を使いたいので

```
pyenv local keraspy
```

としましょう。
これで、このKerasフォルダ以下は、いくらpipインストールをしてもこのkeraspy環境しか汚さず
大元の3.6.0のPythonはもちろん、OSも汚しません。うれしい


# PyCharmの設定

この状態でPyCharmでKerasフォルダを開いてみます。

しかし、なぜかErrorが出るようです
（PyCharmだと実行環境を読み込んでインタープリタを設定してくれるはずなのですが）。

以下のような手順でPythonの実行環境を設定します。

現在Kerasフォルダ内で以下のコマンドを打つとこのように描画されるはずです。

```bash

yourhostname:keras yourname$ pyenv version
kerasenv (set by /Users/yourname/Desktop/keras/.python-version)
```

この/.python-versionはシンボリックリンクで
以下のファイル

```
$ pyenv versions
  system
  3.6.0
  3.6.0/envs/kerasenv
* kerasenv (set by /Users/iwasakiyu/Desktop/keras/.python-version)
```

3.6.0/envs/kerasenvを参照しています。


よって、これをPyCharm上で設定したい気持ちになります。

まず設定画面を開きます。

<img width="1226" alt="スクリーンショット 2019-08-31 11.26.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/0eb568dd-cc32-7838-0bfc-a78d98534643.png">


そして、右上の歯車マークをクリックします。すると、追加というボタンがでるのでそのボタンを押します。（英語版ではAddです。）

すると、以下のような画面が現れます。

<img width="1020" alt="スクリーンショット 2019-08-31 11.31.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/095f5622-f3ef-0499-6959-d5cabcca3b50.png">


この「Pythonインタープリターの追加」

で

Virtual Environment -> 新しい環境　-> ロケーションのフォルダアイコン
をクリックし

使いたい仮想環境

```
/usr/local/var/lib/pyenv/versions/keras
```

を選択してください。

これで、Pyenv-Virtualenv下で、PyCharmを使用することができます。
(そもそもPyCharm自体仮想化できますが･･･)


# むずかしい

環境構築の書き方が難しいため、他の人の記事をみて、もっと勉強していきたいです。


# 追記

## pyenvを入れたのにOSのsystemのPythonが優先されるとき

pyenvを入れても、うまく動作しない、OSのPythonが起動してしまう場合は
コマンドを探しに行く優先順序を決める$PATHの設定が間違っている可能性があります。

pyenvのディレクトリを先に見に行かせる必要があるため
$PATHを書き換えましょう。

[このサイト](https://qiita.com/zaburo/items/dd1a8323633035614efc)が分かりやすかったです。

## PyCharmのもっと簡単な設定

![スクリーンショット 2019-09-13 11.06.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/e1ba39d7-42ff-0ff3-015e-467240a1f089.png)

localにpyenv + virtualenvで作った環境は
下画面のExisisting Environmentで表示されるためそちらを選択するともっと楽でした。