この記事では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のインストールを行うことができました。