Amazon EC2上でPython2.7及び各種ライブラリ環境を整える
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)だったのでその部分を有効な情報に変更しています。
- Install / update to Python 2.7 and latest Pip on EC2 Amazon Linux
- setuptools 5.8 : Python Package Index
# ビルドツールのインストール $ 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
データ分析ライブラリ。
- Python Data Analysis Library — pandas: Python Data Analysis Library
- amazon ec2 - How to install pandas through SSH on EC2 instance - Stack Overflow
こちらはpipが導入済であれば、コマンド一発でインストール完了です。
$ sudo easy_install pip $ sudo pip install pandas
scikit-learn(numpy/scipy/scikit-learn)
機械学習ライブラリ。
- scikit-learn: machine learning in Python — scikit-learn 0.15.2 documentation
- Installing scikit-learn on Amazon EC2 – Attaining Vision
こちらのサイトを元に、各種コマンドを実行。
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
最適化ライブラリ。
- pulp-or - puLP: An LP modeler in Python - Google Project Hosting
- Python - PuLP による線型計画問題の解き方ことはじめ - Qiita
- Python - PuLP で数独を解く - Qiita
インストールは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 を提供。
- boto 2.32.1 : Python Package Index
- How to find the boto version | Cloud & AWS
- AWS SDK for Python | アマゾン ウェブ サービス(AWS 日本語)
導入は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で色々やってみる事を始めてみようかなと思い、その第一歩として環境を整える事からやろう、という思い付きでこのエントリを書くに至ったのでした。こちらからは以上です。