[Amazon Linux] Python3のopen-cvの環境を構築する

この記事ではAmazon LinuxでPython3のopen-cvの環境構築の方法を紹介していきたいと思います。 まず、Amazon Linuxについては公式ホームページを確認すると以下のように記載されています。

Amazon Linux 2 は、アマゾン ウェブ サービス (AWS) が提供する Linux サーバーオペレーティングシステムである Amazon Linux の次世代バージョンです。 安定性に優れ、セキュアで高性能な実行環境であり、さまざまなクラウドアプリケーションおよびエンタープライズアプリケーションの開発や実行に使用されます。

〜〜(中略)〜〜

Amazon Linux 2 LTS Candidate は、Amazon Elastic Compute Cloud (Amazon EC2) で使用する Amazon Machine Image (AMI) として提供されます。 また、Docker コンテナイメージとして提供されるほか、VMware、Oracle VM VirtualBox、Microsoft Hyper-V の仮想化ソリューションで使用する仮想マシンイメージとしても提供されます。 仮想マシンイメージは、オンプレミスでのデプロイとテストに使用できます。

今回はこのAmazon LinuxにPython3のopen-cvをインストールしていきたいと思います。

Amazon Linuxではインスタンス起動時点でPython2系が使用可能です。python3のインストールを行う前にpythonのバージョン管理を行うことができる、pyenv というコマンドラインツールをインストールします。

Python3のインストール手順

1.pyenvを使用するために必要なライブラリのインストール

$ sudo yum install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel

2.pyenvのインストール、権限・パスの設定

$ sudo git clone https://github.com/yyuu/pyenv.git /usr/bin/.pyenv
$ cd /usr/bin/.pyenv
$ sudo mkdir shims
$ sudo mkdir versions

(任意)phpのexec()でpythonコマンドを実行する際権限のエラーとなったため、.pyenv以下の権限を変更します

$ sudo chown -R ec2-user:apache /usr/bin/.pyenv
# apacheのインストールは以下のコマンドを実行
$ yum -y install httpd

# あるいはapacheがインストールされていない場合は
$ sudo chown -R ec2-user:ec2-user /usr/bin/.pyenv

パス設定

$ yum install vim
$ vim ~/.bashrc
; 下記を追記
export PYENV_ROOT="/usr/bin/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
fi
; ここまで
$ source ~/.bashrc

3.pythonの任意のバージョンをインストール

$ pyenv install 3.6.2   
※この時点ではまだデフォルトのバージョン
$ python -V
Python 2.7.12

メインで使用するバージョンの変更を行います

$ pyenv global 3.6.2
$ python -V
Python 3.6.2

もとに戻したいときや他のバージョンにしたい時は以下のコマンドを実行します

$ pyenv versions
 system
 * 3.6.2 (set by /usr/bin/.pyenv/version)
$ pyenv global {使いたいバージョン(system)}

(参考サイト) Amazon LinuxでPython3系を使う

Python3のopen-cvをインストールする手順

1.anacondaをインストール pyenvでanacondaをインストールします。 以下のコマンドでダウンロード可能なバージョンの確認が行えます。

$ pyenv install --list

anacondaのインストール

$ pyenv install anaconda3-5.0.0

実行したところ、以下のエラーが出ました。

BUILD FAILED (Amazon Linux AMI 2017.03 using python-build 1.2.7-3-g5603eb51)

Inspect or clean up the working tree at /tmp/python-build.20180928061226.16440
Results logged to /tmp/python-build.20180928061226.16440.log

調べてみたところ、以下のコマンドを実行することで、修正できるようです。

$ yum install bzip2 -y

もう一度anacondaのインストールを実行します。

$ pyenv install anaconda3-5.0.0

メインで使用するバージョンの変更

$ pyenv global anaconda3-5.0.0

2.opencv3インストール 以下のコマンドを実行をします。

$ conda install -c menpo opencv3

この状態でPythonを実行した際に、import cv2を実行しようとするとgtk2関連の読み込みなどでエラーが起こります。 このエラーの原因はAmazon Linux 用のリポジトリが提供されていないことが理由みたいです。 したがって、かけているリポジトリを、FireFoxをインストールすることにより、自動で追加していくことができます。

なので以下のbash fileを任意の場所に作成し、sudoで実行します。

$ vim firefoxinstall.sh

中身


#!/bin/bash # GTK+ and Firefox for Amazon Linux # Written by Joseph Lawson 2012-06-03 # http://joekiller.com # http://joekiller.com/2012/06/03/install-firefox-on-amazon-linux-x86_64-compiling-gtk/ # chmod 755 ./gtk-firefox.sh # sudo ./gtk-firefox.sh TARGET=/usr/local function init() { export installroot=$TARGET/src export workpath=$TARGET yum --assumeyes install make libjpeg-devel libpng-devel \ libtiff-devel gcc libffi-devel gettext-devel libmpc-devel \ libstdc++46-devel xauth gcc-c++ libtool libX11-devel \ libXext-devel libXinerama-devel libXi-devel libxml2-devel \ libXrender-devel libXrandr-devel libXt dbus-glib \ libXdamage libXcomposite mkdir -p $workpath mkdir -p $installroot cd $installroot PKG_CONFIG_PATH="$workpath/lib/pkgconfig" PATH=$workpath/bin:$PATH export PKG_CONFIG_PATH PATH bash -c " cat << EOF > /etc/ld.so.conf.d/firefox.conf $workpath/lib $workpath/firefox EOF ldconfig " } function finish() { cd $workpath wget -r --no-parent --reject "index.html*" -nH --cut-dirs=7 http://download.cdn.mozilla.net/pub/mozilla.org/firefox/releases/latest/linux-x86_64/en-US/ tar xvf firefox* cd bin ln -s ../firefox/firefox ldconfig } function install() { wget $1 FILE=`basename $1` if [ ${FILE: -3} == ".xz" ] then tar xvfJ $FILE else tar xvf $FILE fi SHORT=${FILE:0:4}* cd $SHORT ./configure --prefix=$workpath make make install ldconfig cd .. } init install ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz install http://download.savannah.gnu.org/releases/freetype/freetype-2.4.9.tar.gz install http://www.freedesktop.org/software/fontconfig/release/fontconfig-2.9.0.tar.gz install http://ftp.gnome.org/pub/gnome/sources/glib/2.32/glib-2.32.3.tar.xz install http://cairographics.org/releases/pixman-0.26.0.tar.gz install http://cairographics.org/releases/cairo-1.12.2.tar.xz install http://ftp.gnome.org/pub/gnome/sources/pango/1.30/pango-1.30.0.tar.xz install http://ftp.gnome.org/pub/gnome/sources/atk/2.4/atk-2.4.0.tar.xz install http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.26/gdk-pixbuf-2.26.1.tar.xz install http://ftp.gnome.org/pub/gnome/sources/gtk+/2.24/gtk+-2.24.10.tar.xz finish # adds the /usr/local/bin to your path by updating your .bashrc file. cat << EOF >> ~/.bashrc PATH=/usr/local/bin:\$PATH export PATH EOF

編集できたら実行します。

$ bash ./firefoxinstall.sh

このままだと以下のエラーメッセージが出力されました。

ImportError: libgtk-x11-2.0.so.0: cannot open shared object file:No such file or directory

以下のコマンドを実行して、libgtk-x11-2.0.so.0のimportエラーを解決します。

$ sudo yum install ftp://ftp.riken.jp/Linux/centos/6/os/x86_64/Packages/hicolor-icon-theme-0.11-1.1.el6.noarch.rpm
$ sudo yum install ftp://ftp.riken.jp/Linux/centos/6/os/x86_64/Packages/atk-1.30.0-1.el6.x86_64.rpm
$ sudo yum install ftp://ftp.riken.jp/Linux/centos/6/os/x86_64/Packages/gdk-pixbuf2-2.24.1-6.el6_7.x86_64.rpm
$ sudo yum install ftp://ftp.riken.jp/Linux/centos/6/os/x86_64/Packages/gtk2-2.24.23-9.el6.x86_64.rpm

最後に、pythonのopwn-cvに必要なもの(cv2など)をpythonコマンドを実行した後にimportしていきます。

$ python
>> import cv2
>> import numpy

以上により、Amazon Linux環境下におけるPython3のopen-cvのインストールを行うことができました。

(参考サイト) AMAZON LINUXでPYTHON3XOPENCV3環境をつくる