Amazon EC2上でPython2.7及び各種ライブラリ環境を整える

2014.10.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWSではPythonはEC2環境にデフォルトで導入されていますし、AWS CLIもPython環境の上に成り立っています。そういう意味ではAWSを扱う人に取ってはPythonは割と身近な言語であると言えるでしょう。

そんな私もAWS CLIは普段使いしておりますが、何気にその他の環境...Pythonそのものであったり、データ分析等で使う(使える)ような各種ライブラリについては未知の分野が多いです。そこで当エントリでは、EC2上でPython環境、主にデータ分析周りのPython環境やライブラリを整える手順についてまとめて行きたいと思います。

目次

EC2環境の準備

まず始めに、環境を構築する事になる土台となるEC2を用意します。こちらは後程(導入時に)メモリを食うライブラリがあったりしますので、少しCPU/Memoryに余裕のあるサーバを用意します。Amazon Linux AMIでm3.xlargeのものを1台用意しました。

起動が完了したらログインまで済ませておきます。ログインしたらPythonとAWS CLIのバージョンを確認。現状Pythonは2.6.9が入っています。

$ ssh -i xxx-yyy-zzz.pem ec2-user@54.xxx.xx.xxx
$ python -V
Python 2.6.9
$ aws --version
aws-cli/1.4.4 Python/2.6.9 Linux/3.14.19-17.43.amzn1.x86_64
$

Python2.7へのアップグレード

基本的には以下ページの内容をそのまま実行する形に。1点、ez_setup.pyをダウンロードするURLが404(File Not Found)だったのでその部分を有効な情報に変更しています。

# ビルドツールのインストール 
$ sudo yum -y install make automake gcc gcc-c++ kernel-devel git-core 

# python 2.7のインストール及びデフォルトのpython symlinkを変更
$ sudo yum -y install python27-devel 
$ sudo rm /usr/bin/python
$ sudo ln -s /usr/bin/python2.7 /usr/bin/python 

# yumのpython2.6記載がある部分を書き換え
$ sudo cp /usr/bin/yum /usr/bin/_yum_before_27 
$ sudo sed -i s/python/python2.6/g /usr/bin/yum 
$ sudo sed -i s/python2.6/python2.6/g /usr/bin/yum 

# pythonバージョン確認
$ python -V 
Python 2.7.5

# python 2.7のpipをインストール
$ sudo curl -o /tmp/ez_setup.py https://bootstrap.pypa.io/ez_setup.py
$ sudo /usr/bin/python27 /tmp/ez_setup.py 
$ sudo /usr/bin/easy_install-2.7 pip 
$ sudo pip install virtualenv

# pipの現在のバージョンを確認
$ pip -V && virtualenv --version
pip 1.5.6 from /usr/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg (python 2.7)
1.11.6

AWS CLIのアップグレード

こちらはAmazon Linux AMI起動時点で既に導入されていますね。Python 2.7にアップグレードした後にAWS CLIも併せてアップグレードしておきます。

$ aws --version
aws-cli/1.4.4 Python/2.6.9 Linux/3.14.19-17.43.amzn1.x86_64
$ sudo pip install --upgrade awscli
$ aws --version
aws-cli/1.4.4 Python/2.7.5 Linux/3.14.19-17.43.amzn1.x86_64

Beautiful Soup

Webスクレイピング用のライブラリ。

# インストール
sudo pip install beautifulsoup4

# lxmlも併せて導入しておくと良いらしいのでインストール
sudo yum -y install libxslt-devel libxml2-devel gcc python-devel
sudo pip install lxml

IPython

対話的実行環境。

python 2.7への環境整備後、以下コマンドを実行します。

sudo pip install ipython

コマンド:ipythonで起動を確認。

$ ipython
Python 2.7.5 (default, Sep 15 2014, 17:30:20) 
Type "copyright", "credits" or "license" for more information.

IPython 2.2.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]:

pandas

データ分析ライブラリ。

こちらはpipが導入済であれば、コマンド一発でインストール完了です。

$ sudo easy_install pip
$ sudo pip install pandas

scikit-learn(numpy/scipy/scikit-learn)

機械学習ライブラリ。

こちらのサイトを元に、各種コマンドを実行。

sudo yum -y install gcc-c++ python27-devel atlas-sse3-devel lapack-devel
wget https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.2.tar.gz
tar xzf virtualenv-1.11.2.tar.gz 
python27 virtualenv-1.11.2/virtualenv.py sk-learn
. sk-learn/bin/activate
(sk-learn)$ sudo pip install numpy

実行後にNumPyの確認。

(sk-learn)$ exit
$ python -c "import numpy; numpy.show_config()"

追加でscupy、そしてscikit-learnのインストール。

$ . sk-learn/bin/activate
(sk-learn)$ sudo pip install scipy
(sk-learn)$ sudo pip install scikit-learn

以前は途中でsudo pip install scipyでコケてしまい、以下の様なエラーを出していたため、関連してそうなリンクから察するにEC2のパワー不足と踏んで今回インスタンスタイプを上げて実行してみましたが、今回は問題無くscipy, scikit-learnの導入が行えました。

virtual memory exhausted: メモリを確保できません

PuLP

最適化ライブラリ。

インストールはpipコマンドで一発。

sudo pip install pulp

SimPy

シミュレーションライブラリ。

インストールはpipコマンド一発。

$ sudo pip install simpy

動作検証。pytestも併せてインストールした後にコマンドを実行します。

$ sudo pip install pytest
$ python -c "import simpy; simpy.test()"
============================================================= test session starts ==============================================================
platform linux2 -- Python 2.7.5 -- py-1.4.25 -- pytest-2.6.3
collected 116 items 

../../usr/lib/python2.7/site-packages/simpy/test/test_condition.py .................
../../usr/lib/python2.7/site-packages/simpy/test/test_environment.py ....
../../usr/lib/python2.7/site-packages/simpy/test/test_event.py ......
../../usr/lib/python2.7/site-packages/simpy/test/test_exceptions.py ...s....
../../usr/lib/python2.7/site-packages/simpy/test/test_interrupts.py ..........
../../usr/lib/python2.7/site-packages/simpy/test/test_process.py .....s....
../../usr/lib/python2.7/site-packages/simpy/test/test_resources.py ..............................
../../usr/lib/python2.7/site-packages/simpy/test/test_rt.py .......
../../usr/lib/python2.7/site-packages/simpy/test/test_timeout.py .....
../../usr/lib/python2.7/site-packages/simpy/test/test_util.py ...................

==================================================== 114 passed, 2 skipped in 1.95 seconds =====================================================
$

boto

AWS SDK for Python。Amazon S3、Amazon EC2、Amazon DynamoDB など、多くの AWS サービス向けの Python API を提供。

導入はpipで一発。

$ sudo pip install boto

SymPy

数式処理。

インストールはこちらもpipコマンドで行けました。

$ sudo pip install sympy

matplotlib

Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリ。

インストールはyumコマンド一発で行けました。

$ sudo yum -y install freetype-devel libpng-devel python-matplotlib

まとめ

以上、EC2インスタンス環境上にPythonの主立っていそうなライブラリを導入するエントリでした。ほぼ大半がyumやpipコマンドで整うので、学びの為の第一歩も踏み出し易くて嬉しい感じですね。

というのも今回、以下の勉強会情報を目にしてPythonで色々やってみる事を始めてみようかなと思い、その第一歩として環境を整える事からやろう、という思い付きでこのエントリを書くに至ったのでした。こちらからは以上です。