CentOSにpyenvを利用してAnacondaをインストール

pyenvを利用してAnacondaをインストールしたメモです。

Anaconda

今までpython機械学習系ライブラリを個別にインストールしてきましたが、
Anacondaを使用すると、python機械学習で必要なライブラリを
まとめて一気にインストールできます。

f:id:pppurple:20160503024913j:plain
https://www.continuum.io/why-anaconda

機械学習系の重要なライブラリはほぼすべてインストールされます(150以上)。
NumPy,SciPy,scikit-learn,matplotlib,pandas,IPython,conda,……
など、機械学習で必要となるライブラリを一気にインストールできます。

pyenv

今回はAnaconda3をインストールしますが、同時にpython3.5がインストールされます。
CentOSにデフォルトでインストールされているpython2はそのままにするため、
pyenvを利用してインストールします。

pyenvを利用すると、複数のバージョンのpythonを共存させて
簡単に切り替えることができます。

github.com

今回はCentOS6への手順ですが、CentOS7でも同様の手順でいけるはずです。

依存関係インストー

まずは、下記に書いてある通り、必要な依存関係をインストールします。
https://github.com/yyuu/pyenv/wiki

後ほどgitでpyenvを取得するので、gitもインストールしておきます。

# yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git
pyenvインストー

gitでリポジトリから取得します。

# git clone https://github.com/yyuu/pyenv.git ~/.pyenv

bash_profileの末尾に環境変数を追記します。

# vi .bash_profile

.bash_profile

# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

bash_profileを反映。

# source .bash_profile

下記にように表示されればOKです。

# pyenv version
system (set by /root/.pyenv/version)
Anacondaインストー

インストールできるAnacondaのバージョンを一覧表示します。

# pyenv install --list
Available versions:
   :
  anaconda-1.4.0
  anaconda-1.5.0
  anaconda-1.5.1
  anaconda-1.6.0
  anaconda-1.6.1
  anaconda-1.7.0
   :
   :
  anaconda3-2.2.0
  anaconda3-2.3.0
  anaconda3-2.4.0
  anaconda3-2.4.1
  anaconda3-2.5.0
  anaconda3-4.0.0
   :

今回は最新のanaconda3-4.0.0をインストールします。
pyenv installコマンドでインストールします。

# pyenv install anaconda3-4.0.0

pythonのバージョンを確認してみると、
まだ元々OSに入っているpython2.6.6が表示されます。

# python --version
Python 2.6.6

pyenv versionsコマンドで利用可能なバージョンが表示されます。
systemとなっているのは元々入っていたpython2.6.6です。
「*」がついているのが現在使用しているバージョンです。

# pyenv versions
* system (set by /root/.pyenv/version)
  anaconda3-4.0.0

下記コマンドでanaconda3-4.0.0に切り替えます。

# pyenv global anaconda3-4.0.0
# pyenv rehash

バージョンを表示すると3.5.1に切り替わっています。

# python --version
Python 3.5.1 :: Anaconda 4.0.0 (64-bit)

再度下記pyenvコマンドでバージョンを表示してみます。
anaconda3-4.0.0に「*」がついて切り替わっているのがわかります。

# pyenv versions
  system
* anaconda3-4.0.0 (set by /root/.pyenv/version)

systemに切り替えてみます。

# pyenv global system

バージョンが2.6.6に戻っています。

# python --version
Python 2.6.6

確認してみると、systemに「*」がついて切り替わっているのがわかります。

# pyenv versions
* system (set by /root/.pyenv/version)
  anaconda3-4.0.0
condaでのパッケージ管理

condaはpipに代わるAnacondaのパッケージマネージャです。
condaを使う場合、まずcondaコマンドでconda自身をアップデートします。

# conda update conda
# conda --version
conda 4.0.5

conda list
conda listでインストールされているすべてのパッケージとバージョンが一覧表示されます。

# conda list
packages in environment at /root/.pyenv/versions/anaconda3-4.0.0:
 
alabaster                 0.7.7                    py35_0
anaconda                  4.0.0               np110py35_0
anaconda-client           1.4.0                    py35_0
anaconda-navigator        1.1.0                    py35_0
argcomplete               1.0.0                    py35_1
astropy                   1.1.2               np110py35_0
babel                     2.2.0                    py35_0
beautifulsoup4            4.4.1                    py35_0
bitarray                  0.8.1                    py35_0
blaze                     0.9.1                    py35_0
bokeh                     0.11.1                   py35_0
boto                      2.39.0                   py35_0
bottleneck                1.0.0               np110py35_0
cffi                      1.5.2                    py35_0
chest                     0.2.3                    py35_0
cloudpickle               0.1.1                    py35_0
clyent                    1.2.1                    py35_0
colorama                  0.3.7                    py35_0
conda                     4.0.5                    py35_0
conda-build               1.20.0                   py35_0
conda-env                 2.4.5                    py35_0
conda-manager             0.3.1                    py35_0
configobj                 5.0.6                    py35_0
cryptography              1.3                      py35_0
curl                      7.45.0                        0
cycler                    0.10.0                   py35_0
cython                    0.23.4                   py35_0
                           :
                           :
                           :

特定のパッケージを指定して表示することも可能

# conda list scikit-image
packages in environment at /root/.pyenv/versions/anaconda3-4.0.0:

scikit-image              0.12.3              np110py35_0

ワイルドカードも使えるようです。

# conda list scikit-*
packages in environment at /root/.pyenv/versions/anaconda3-4.0.0:

scikit-image              0.12.3              np110py35_0
scikit-learn              0.17.1              np110py35_0

conda search
conda searchでパッケージを検索します。
デフォルトでは http://anaconda.org から検索するようです。

# conda search cdecimal
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ....
cdecimal                     2.3                      py26_0  defaults
                             2.3                      py27_0  defaults
                             2.3                      py33_0  defaults
                             2.3                      py34_0  defaults

conda install
simplejsonというパッケージをインストールしてみます。
まずconda listでまだインストールされていないことを確認。

# conda list simplejson
packages in environment at /root/.pyenv/versions/anaconda3-4.0.0:

conda searchでパッケージが存在する事を確認。

# conda search simplejson
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ....
simplejson                   3.8.0                    py27_0  defaults
                             3.8.0                    py34_0  defaults
                             3.8.0                    py35_0  defaults
                             3.8.1                    py27_0  defaults
                             3.8.1                    py34_0  defaults
                             3.8.1                    py35_0  defaults
                             3.8.2                    py27_0  defaults
                             3.8.2                    py34_0  defaults
                             3.8.2                    py35_0  defaults

conda installでインストールします。

# conda install simplejson
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ....
Solving package specifications: .........

Package plan for installation in environment /root/.pyenv/versions/anaconda3-4.0.0:
              :
              :
              :
Linking packages ...
[      COMPLETE      ]|#################################################################| 100%

conda listでインストールされたことを確認。

# conda list simplejson
 packages in environment at /root/.pyenv/versions/anaconda3-4.0.0:

simplejson                3.8.2                    py35_0

conda update
conda updateでパッケージをアップデートできます。

# conda update simplejson
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ....
              :
              :
simplejson                3.8.2                    py35_0

conda remove
conda removeでパッケージの削除ができます。

# conda remove simplejson
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ....
Solving package specifications: .........

Package plan for package removal in environment /root/.pyenv/versions/anaconda3-4.0.0:
              :
              :
Unlinking packages ...
[      COMPLETE      ]|#################################################################| 100%

確認するとちゃんと消えてます。

# conda list simplejson
packages in environment at /root/.pyenv/versions/anaconda3-4.0.0:

Anacondaのアップデート
anacondaをアップデートする場合、conda updateでアップデートします。

# conda update anaconda

ただし、上記コマンドでは各パッケージはアップデートされません、
パッケージをアップデートする場合は下記コマンドを実行します。

# conda update --all
ライブラリの動作確認

IPythonでNumPy,pandasがちゃんと動くか軽く確認してみます。

# ipython

In [1]: import numpy as np

In [2]: np.random.randn(10)
Out[2]:
array([ 0.7322451 ,  0.19859575, -2.5222557 , -1.2713138 ,  0.0678604 ,
       -0.30271752,  0.93476445, -0.82120115, -0.34360235, -0.11382497])

In [3]: from pandas import Series, DataFrame

In [4]: Series(np.random.rand(5))
Out[4]:
0    0.744291
1    0.154818
2    0.069733
3    0.638035
4    0.890517
dtype: float64

In [5]: DataFrame({'num': [1, 2, 3], 'char': ['A', 'B', 'C']})
Out[5]:
  char  num
0    A    1
1    B    2
2    C    3

だいじょうぶそうです。

終わり。