Edited at

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

More than 3 years have passed since last update.


概要

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) の環境に入る

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