はじめての人工知能。CentOS7.0 でTensorflow。virtualenvで、python3.5系とpython2.7系に分けて構築。


# 概要
Tensorflowのpythonのバージョンを切り替えて使用するため、python 2.7系、python3.5系でそれぞれ作ってみる。
※Tensorflowを色々な環境で試してみたい方用なので、こんなにたくさんインストールする必要はありません。
※ご自分の用途に合わせてインストールしてください。

# 環境
CentOS 7.0
python 2.7.5 （既存）

# 事前準備
**yumのアップデート**

```
yum update -y
```
yum の groupinstallで開発関連ツールを一括インストール。

```
# yum groupinstall "Development Tools"
```

**python3.5.2をインストール**

```
# wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
# cd Python-3.5.2
# ./configure --with-threads
# make altinstall
# cd
```

make installにしなかった理由は下記の通り。
※make install は python バイナリを上書きまたは覆い隠すかもしれません。
そのため、 make install の代わりに exec_prefix/bin/pythonversion しかインストールしない make altinstall が推奨されます。
参考：http://docs.python.jp/2/using/unix.html


**pipのインストール**

```
# wget https://bootstrap.pypa.io/get-pip.py
# python get-pip.py
```

pipをインストールしたらアップデートします。

```
# pip -V
# pip install --upgrade pip
```

pip コマンドがうまく発動しない場合はパスが通っていないので下記のコマンドでpipの場所を確認しパスを追加します。

```
# which pip
```

パスの追加に関しては、他の方々のページを参考にしてください。

普通編（参考）：Linux パス(PATH)の確認と設定方法:pathの追加
http://blog.96q.org/2008/03/21/path-setting-method/

上級編（参考）：$PATH から特定のパスだけを削除する
http://qiita.com/ironsand/items/10e28d7589298090ec23


**pyenv と pyenv-virtualenv をクローンする**
ついでなので、pyenv-virtualenvwrapper もインストールしておきます。

```
# git clone https://github.com/yyuu/pyenv.git ~/.pyenv
# git clone git://github.com/yyuu/pyenv-virtualenv.git ./.pyenv/plugins/pyenv-virtualenv
# git clone https://github.com/yyuu/pyenv-virtualenvwrapper.git ./.pyenv/plugins/pyenv-virtualenvwrapper
```

次に、パスを追加します。

```
# vi ~/.bashrc

# ~/.bashrc　に下記を末尾に追加
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
```

.bashrcと.bash_profileについては下記を参考にさせていただきました。

参考：本当に正しい .bashrc と .bash_profile の使ひ分け
http://qiita.com/magicant/items/d3bb7ea1192e63fba850

パスが通ったか確認

```
# source ~/.bashrc
# echo $PATH
```

**gitをアップデート**
~/.pyenvに移動して、gitがあることを確認したらアップデートさせます。
アップデートが終わったら、ホームに戻ります。

```
# cd ~/.pyenv
# ls -a
# git pull origin
# cd
```

**pyenv 環境を確認**
現在 system のみ存在していることがわかります。
※選択している環境の頭に（*）印がついていることを確認。

```
# pyenv versions
* system (set by /root/.pyenv/version)
```

続いて、pyenv でインストールできるものを一覧表示させます。

```
# pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  ・
  ・
  （中略）
  ・
  ・
  stackless-3.2.2
  stackless-3.2.5
  stackless-3.3-dev
  stackless-3.3.5
  stackless-3.4.1
```

色々なバージョンがインストールできることがわかります。


# pyenv で python3.5系のインストール
python3.5系、python2.7系をインストールし、環境ごとにバージョンを切り替えられるように設定していきます。
今回は、python3.5.2 をインストールしてみます。

```
# pyenv install 3.5.2
```

※ちなみに、pythonのバージョンを間違えたときは、install を uninstall に変えればOK。
アンインストールしたい任意のバージョンを選択（下は、python 3.5.2を選択）

```
# アンインストール例
# pyenv uninstall 3.5.2
```

インストールできたら、rehashして確認。

```
# pyenv rehash
# pyenv versions
* system (set by /root/.pyenv/version)
  3.5.2
```

3.5.2が表示されていたら、インストール完了。
続いてpython2.7系をインストールします。
python2.7系をインストールされない方は、「pyenv-virtualenvを使ってTensorflowのpython環境を分ける（python3.5系）」に飛んでください。

# pyenv で pytho2.7系のインストール
python2.7系をインストールします。

```
# pyenv install 2.7.11

Installing Python-2.7.11...
Installed Python-2.7.11 to /root/.pyenv/versions/2.7.11
```

インストールできたら、rehashして確認してみましょう。

```
# pyenv rehash
# pyenv versions
* system (set by /root/.pyenv/version)
  2.7.11
  3.5.2
```

python2.7.11がインストールできました。

# pyenv-virtualenv を使って Tensorflow の python 環境を分ける（python3.5系）
virtualenvで、Tensorflowをpython3.5系で使用できる環境を作ります。

まず、環境を分けるためのディレクトリーを作成します。

```
# mkdir tensorflow352
```

ディレクトリー名は使用する python のバージョンがわかるよにするといいと思います。
pyenv-virtualenv で仮想環境の構築します。

```
# cd tensorflow352
# pyenv virtualenv 3.5.2 tensorflow352
# pyenv rehash
# pyenv local tensorflow352
```

環境が作成されたか確認します。

```
# pyenv versions
  system
  2.7.11
  3.5.2
  3.5.2/envs/tensorflow352
  anaconda3-4.1.0
* tensorflow352 (set by /root/tensorflow352/.python-version)
```

一番下に確認できました。

python のバージョンも確認してください。

```
# python -V
Python 3.5.2
```

**pipのバージョンアップ**
次にtensorflowをインストールしますが、その前に pip をバージョンアップしておきます。
バージョンアップしていないと、Tensorflow のインストール時に怒られます。
現在のフォルダーは、「tensorflow352」にいます。

```
# pwd
/root/tensorflow352

# pip install --upgrade pip

Collecting pip
  Using cached pip-8.1.2-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 8.1.1
    Uninstalling pip-8.1.1:
      Successfully uninstalled pip-8.1.1
Successfully installed pip-8.1.2
```

Tensorflowをインストールします。

```
# pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp35-cp35m-linux_x86_64.whl
```

Tensorflowが使えるか確認してみましょう。

```
# python

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 8
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 8
>>> print(sess.run(hello))
Hello, TensorFlow!
```

問題なく動きました。
pythonを終了させておきます。

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

# Tensorflowのインストール（python2.7系）
pyenvでpython環境を2.7系に切り替えます。

```
# cd
# pyenv global 2.7.11
# pyenv versions
  system
* 2.7.11 (set by /root/.pyenv/version)
  3.5.2
  3.5.2/envs/tensorflow352
  anaconda3-4.1.0
  tensorflow352
```

（*）印が2.7.11に移動しています

切り替わっていることが確認できました。

さらに、python のバージョンも確認してください。

```
# python -V
Python 2.7.11
```

続いて、Tensorflowをpython2.7系でインストールするための環境を作成します。

```
# mkdir tensorflow2711
# pyenv virtualenv 2.7.11 tensorflow2711
```

※後部の「tensorflow2711」は、各自で分かりやすい名称に変更することができます。tensorflowのpython2.7.11をインストールするのでわかりやすい環境名をつけます。

環境が作成されたか確認します。

```
# pyenv versions
  system
* 2.7.11 (set by /root/.pyenv/version)
  2.7.11/envs/tensorflow2711
  3.5.2
  3.5.2/envs/tensorflow352
  anaconda3-4.1.0
  tensorflow2711
  tensorflow352
```

確認できました。
python2.7.11がインストールされているか確認してみましょう。

```
# cd tensorflow2711
# python -V
Python 2.7.11
```

続いて、tensorflowをインストールします。
環境を「tensorflow2711」に切り替えてTensorflowをインストールします。

```
# pyenv local tensorflow2711
# pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl
```

Tensorflowが使えるか確認してみましょう。

```
# python

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 8
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 8
>>> print(sess.run(hello))
Hello, TensorFlow!
```

問題なく動きました。
pythonを終了させておきます。

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

# pyenv の global でsystemを選んでも元に戻らない時の対処法
わたしもハマりました。ありがとうございます。

```
# rm ~/.python-version
```

参考：pyenv globalで切り替わらない！
http://qiita.com/1234224576/items/11ad3509fe4b0a9a33ed

#  virtualenv　の　「global」と「local」
python 環境を切り替える時に、この「global」と「local」を使うのですが、例えば今回のようにディレクトリーごとにTensorflowのpython環境を切り替えたい時に、該当するディレクトリーで「pyenv local tensorflow352」として指定しておけば、「cd」でカレントディレクトリーに戻ったら、先の環境から自動で抜け出すことができます。

```
[root]# pyenv versions
* system (set by /root/.pyenv/version)
  2.7.11
  2.7.11/envs/tensorflow2711
  3.5.2
  3.5.2/envs/tensorflow352
  tensorflow2711
  tensorflow352

[root]# cd tensorflow352                         <-- tensorflow352 に移動
[root tensorflow352]# pyenv local tensorflow352  <-- 切替
(tensorflow352) [root tensorflow352]# cd         <-- あたまに (tensorflow352) がつく
[root]# cd tensorflow352                         <-- ディレクトリを抜けると (tensorflow352) が自動ではずれる
(tensorflow352) [root tensorflow352]#            <-- 次に入ると自動で (tensorflow352) の環境に入る
```


間違いや、無駄な作業などがありましたら、ご指摘いただけたらと思います。