pyenv, pyenv-virtualenv環境構築(TensorFlowもあるよ)

# 概要

CentOSでのpyenv, pyenv-virtualenvの環境構築おぼえがきです。システム全体で使う事を想定し、pyenvはよくあるユーザhome下の.pyenvではなく/usr/local/pyenv配下に入れます。


## インストール

※ sudo設定が変更されます。検証無しにクリティカルなサーバに実行するのはやめてください

* ansibleでインストールします ([GitHub](https://github.com/ftakao2007/install_pyenv_vitualenv))
    * ansibleが実行できる環境は事前に用意しておいてください
    * site.ymlの変数値を変えるとユーザをvagrant以外にしたり、インストール先を/usr/local/pyenv以外にできたりします。
    * sshパスワードが必要な場合は-kオプションを付与してください
    * sudoパスワードが必要な場合は-Kオプションを付与してください
    * 192.168.33.11は適当なアドレスに変えてください
        * 「,」はゴミではありません。消さないでください

``` shell
$ cd ~
$ git clone https://github.com/ftakao2007/install_pyenv_vitualenv.git
$ cd install_pyenv_vitualenv
$ ansible-playbook -i "192.168.33.11," -u vagrant -c paramiko -vvv site.yml
```


## pyenv
* 利用するpythonのバージョンを切り替えるために利用します。

``` shell
### 現在のPythonのバージョンの確認
$ pyenv versions
================================================
  system
* 2.7.11 (set by /usr/local/pyenv/version)
================================================

### インストールできるバージョン一覧
$ pyenv install -l
================================================
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
...
================================================

### Python 3.5.1のインストール
$ sudo pyenv install 3.5.1

### globalで特定のバージョンをインストールしてシステムで使う
$ sudo pyenv global 3.5.1
$ pyenv versions
================================================
  system
  2.7.11
* 3.5.1 (set by /usr/local/pyenv/version)
================================================

### localにするとそのディレクトリ配下のみそのバージョンになる
$ mkdir pyenvtest
$ cd pyenvtest
$ pyenv local 2.7.11
$ cat .python-version
================================================
2.7.11
================================================

$ python -V
================================================
Python 2.7.11
================================================

$ pyenv versions
================================================
  system
* 2.7.11 (set by /home/vagrant/pyenvtest/.python-version)
  3.5.1
================================================
```

## pyenv-virtualenv

* Pythonの仮想環境の構築に使用する
    * ディレクトリ単位でpythonのバージョン，パッケージを管理

* ここでは特定のディレクトリに移動するだけで仮想環境を利用できる設定にする
    * activate/deactivate 実行不要

``` shell
### ディレクトリ作成
$ mkdir pyenv-virtualenv

### pyenv-virtualenvで仮想環境の構築
$ cd pyenv-virtualenv
$ sudo pyenv virtualenv 3.5.1 pyenv-virtualenv
$ pyenv local pyenv-virtualenv

(pyenv-virtualenv) $ pyenv versions
================================================
  system
  2.7.11
  3.5.1
* pyenv-virtualenv (set by /home/vagrant/pyenv-virtualenv/.python-version)
================================================

(pyenv-virtualenv) $ cat .python-version
================================================
pyenv-virtualenv
================================================

### ディレクトリを抜けると自動的にdeactivate
(pyenv-virtualenv) $ cd ..
================================================
$ 
================================================

### ディレクトリに入ると自動的にactivate
$ cd pyenv-virtualenv
================================================
(pyenv-virtualenv) $
================================================

### pipとsetuptoolsをupgradeしておく
(pyenv-virtualenv)$ sudo 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 7.1.2
    Uninstalling pip-7.1.2:
      Successfully uninstalled pip-7.1.2
Successfully installed pip-8.1.2
================================================

(pyenv-virtualenv)$ sudo pip install --upgrade setuptools
================================================
Collecting setuptools
  Using cached setuptools-23.0.0-py2.py3-none-any.whl
Installing collected packages: setuptools
  Found existing installation: setuptools 18.2
    Uninstalling setuptools-18.2:
      Successfully uninstalled setuptools-18.2
Successfully installed setuptools-23.0.0
================================================
```

# Appendix

## TensorFlowのインストール
CentOS7の場合以下実行するとTensorFlowがインストールできます。(CentOS6は不可)

``` shell
$ cd ~/install_pyenv_vitualenv
$ ansible-playbook -i "192.168.33.11," -u vagrant -c paramiko -vvv tensorflow.yml -t tensorflow
```

## pyenv-virtualenv

``` shell
### インストールされているパッケージの確認
$ cd ~/tensorflow
(tensorflow) $ pip freeze
================================================
numpy==1.11.0
protobuf==3.0.0b2
six==1.10.0
tensorflow==0.9.0rc0
================================================

### 仮想環境の削除
(tensorflow) $ pyenv versions
================================================
  system
  2.7.11
  3.5.1
  3.5.1/envs/pyenv-virtualenv
  3.5.1/envs/tensorflow
  pyenv-virtualenv
* tensorflow (set by /home/vagrant/tensorflow/.python-version)
================================================

(tensorflow) $ sudo pyenv uninstall tensorflow
================================================
pyenv-virtualenv: remove /usr/local/pyenv/versions/3.5.1/envs/tensorflow? y  <- yを入力
$
================================================

$ rm .python-version
$ pyenv versions
================================================
  system
* 2.7.11 (set by /usr/local/pyenv/version)
  3.5.1
  3.5.1/envs/pyenv-virtualenv
  pyenv-virtualenv
================================================

```
# 手で入れる場合

* rbenvが不要の場合はrbenv部分は非実施

``` shell
### rootになる
# sudo su -

### 必要なパッケージのインストール
# yum install -y git gcc gcc-c++ make bzip2-devel zlib-devel openssl-devel sqlite-devel readline-devel

### pyenvをcloneする
# cd /usr/local
# git clone https://github.com/yyuu/pyenv.git

### profile.d配下にpyenvが使う環境変数を設定
# vi /etc/profile.d/pyenv.sh
================================================
export PYENV_ROOT="/usr/local/pyenv" 
export PATH="/usr/local/pyenv/bin:$PATH" 
eval "$(pyenv init -)" 
================================================
# source /etc/profile.d/pyenv.sh

### sudoersの設定、pyenv, rbenv用の設定を入れておく。またパスワード無しでsudo実行できるようにする
# visudo
================================================
Defaults    secure_path ="/usr/local/pyenv/bin:/usr/local/pyenv/shims:/usr/local/rbenv/bin:/usr/local/rbenv/shims:/sbin:/bin:/usr/sbin:/usr/bin" 
Defaults        env_keep += "PATH PYENV_ROOT" 
Defaults        env_keep += "PATH RBENV_ROOT" 
...
#%wheel ALL=(ALL)       ALL            ### コメントアウト
...
%wheel ALL=(ALL)       NOPASSWD: ALL  ### コメントアウトを外す
================================================

### pyenvでPython3系を入れる
# pyenv install 3.6.1

### 入った事の確認
# pyenv versions
================================================
* system (set by /usr/local/pyenv/version)
  3.6.1
================================================
pyenv-virtualenvのインストール
Rubyの「bundle install --path vendor/bundle」みたいなもの
システムとは隔離した環境を作るためのもの
### インストールするディレクトリに移動
# cd /usr/local/pyenv/plugins

### pyenv-virtualenvをcloneする
# git clone https://github.com/yyuu/pyenv-virtualenv.git

### pyenv-virtualenvが使う環境変数を設定
# vi /etc/profile.d/pyenv-virtualenv.sh
================================================
export PYENV_ROOT="/usr/local/pyenv" 
eval "$(/usr/local/pyenv/bin/pyenv virtualenv-init -)" 
================================================
source /etc/profile.d/pyenv-virtualenv.sh
rbenvのインストール
### 必要なパッケージのインストール
# yum install -y git gcc gcc-c++ make patch unzip bzip2 bzip2-devel zlib zlib-devel openssl openssl-devel gdbm-devel ncurses-devel freetype-devel readline-devel sqlite-devel libxml2-devel libxslt-devel libffi-devel libjpeg-turbo-devel libpng-devel libyaml libyaml-devel libffi libffi-devel

### rbenvをcloneする
# cd /usr/local
# git clone https://github.com/sstephenson/rbenv

### ruby-buildをcloneする
# mkdir rbenv/plugins
# cd rbenv/plugins
# git clone https://github.com/sstephenson/ruby-build

### profile.d配下にrbenvが使う環境変数を設定
# vi /etc/profile.d/rbenv.sh
================================================
export RBENV_ROOT="/usr/local/rbenv" 
export PATH="/usr/local/rbenv/bin:$PATH" 
eval "$(rbenv init -)" 
================================================
# source /etc/profile.d/rbenv.sh

### ruby2系のインストール
# rbenv install 2.4.1

### 入った事の確認
# rbenv versions
================================================
  2.4.1
================================================

### サーバを出る
# exit
$ exit
```

# 参考

* [pyenv-virtualenvでディレクトリ単位のpython環境構築](http://qiita.com/niwak2/items/5490607be32202ce1314)
* [pyenvとvirtualenvで環境構築](http://qiita.com/Kodaira_/items/feadfef9add468e3a85b)