Pyton labs.beatcraft.com
CentOS 5.6(32bit版)にpython2.6.6をインストールする手順とpython2.6.6にあわせた
PIL(Python Imaging Library)、mod_wsgi、OpenCVをインストールする手順を記載します。
python2.6.6は他のバージョンや導入済みのバージョンと分ける為に、デフォルトの
インストールディレクトリではなく、/usr/local/以下のディレクトリにインストール先を指定しています。
CentOS 5.5(32bit)をインストールしています。update後CentOS 5.6に更新されます。
以下のような設定でCentOS 5.5をインストールしています。
パッケージ:Server (NoGUI) 言語、キーボード: Japanese パーティション:default パーティション ネットワーク:DHCP システムタイム:UTC FireWall,SELinux :Disable
また、以下のパッケージの追加と削除を行っています。
customパッケージ 追加パッケージ:開発ツール、開発ライブラリ 削除パッケージ:DNSネームサーバ削除
yumコマンドでCentOSを最新の状態にアップデートしています。
yum install yum-fastestmirror <- リポジトリを最も近いリポジトリに変更、確認 yum update <- OSのアップデート
yum update後のkernel versionは以下のとおりです。
uname -a Linux localhost.localdomain 2.6.18-238.9.1.el5PAE #1 SMP Tue Apr 12 18:52:55 EDT 2011 i686 i686 i386 GNU/Linux
上記設定ではUTCを使用していますので、時刻を合わせるためntpをインストールします。
$ sudo yum install ntp
現在のマシンの時刻をntpから取得した時刻に修正します。
# data # /usr/sbin/ntpdate -s ntp.nict.jp
修正した時刻をハードウェアに記録します。
# clock -w
以下の3つの日本のntpサーバを/etc/ntp/step-tickersに登録します。
# vi /etc/ntp/step-tickers ntp.nict.jp ntp.jst.mfeed.ad.jp ntp.ring.gr.jp
上記手順でCentOSに導入されているpythonのバージョンとディレクトリは以下のとおりです。
# python -V Python 2.4.3 # pwd /usr/bin # ls -l python* -rwxr-xr-x 2 root root 8304 3月 6 11:27 python lrwxrwxrwx 1 root root 6 5月 3 00:02 python2 -> python -rwxr-xr-x 2 root root 8304 3月 6 11:27 python2.4
CentOSの標準リポジトリでは2.4系のバージョンしか取得できないのでepelのリポジトリを追加し
python26をインストールします。epelはExtra Packages for Enterprise Linux の略称です。
標準リポジトリでは導入できない様々なパッケージを追加することができます。
epelのリポジトリを追加しphyton2.6.5と開発用パッケージをインストールします。
$ wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm $ sudo rpm -Uvh epel-release-5-4.noarch.rpm
必要時以外はepelのリポジトリを呼び出さない設定に変更します。
$ sudo vi /etc/yum.repos.d/epel.repo [epel] name=Extra Packages for Enterprise Linux 5 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5& arch=$basearch failovermethod=priority enabled=0 <-1から0に変更します。 gpgcheck=1
python26をインストールする前にlibffi(python26であわせてインストールされます)が
既にインストールされていないかを確認をします。ここではインストールされていないので、
yumコマンドでpython26をインストールします。
$ rpm -qa libffi <- libffiをインストールするので既にインストールされているか確認 $yum install --enablerepo=epel python26 Installed: python26.i386 0:2.6.5-6.el5 ...<略> Dependency Installed: libffi.i386 0:3.0.5-1.el5 python26-libs.i386 0:2.6.5-6.el5
あわせて、python26の開発用ライブラリをインストールします。
yum install python26-devel --enablerepo=epel
インストール完了後バージョンの確認をします。ここではpythonコマンドでは2.4.3を指し、
python26コマンドではpython2.6.5を指している事を確認します。
$ python -V Python 2.4.3 python26 -V Python 2.6.5 $ python2.6 -V Python 2.6.5
python2.6.6をソースコードからconfig、makeしインストールします。またconfigで共有ライブラリを
有効にした状態でのビルドを行います。
上記の状態では2.6.6のmake時に2.6.5の共有ライブラリを参照してしまうため、
LD_LIBRARY_PATHにpython2.6.6のPATHを追加し、あわせてMakefileの書き換えを行い
2.6.5の共有ライブラリを参照しないようにします。
また、インストール先のディレクトリをここでは/usr/local/python266と指定しています。
以下のURLからソースファイルをダウンロードしてきます。/home/beat/python-orig/Python-2.6.6/は
pyhton2.6.6のソースアーカイブをダウンロードしたファイルの展開先ディレクトリです。
http://www.python.org/download/releases/2.6.6/
LD_LIBRARY_PATHの先頭にpython2.6.6のファイルの展開先ディレクトリを追加します。
export LD_LIBRARY_PATH=/home/beat/python-orig/Python-2.6.6/Lib:$LD_LIBRARY_PATH
以下のconfigオプションを使用しています。enable-unicode=ucs4はdistributeのインストール時に
エラーが起こるのを防ぐために使用しています。
$ cd /home/beat/python-orig/Python-2.6.6 ./configure --with-threads --enable-shared --enable-unicode=ucs4 --prefix=/usr/local/python266
configureコマンドでLDLFLAGS と-Lのオプションを追加するとエラーになるので
Makefileを直接以下のように書き換えます。
$ vi Makefile Makefile CPPFLAGS= -I. -IInclude -I$(srcdir)/Include LDFLAGS= -L$(srcdir)/Lib <-追加 LDLAST= $ make $ ./python -V Python 2.6.6 $ ldd ./python linux-gate.so.1 => (0x00270000) libpython2.6.so.1.0 (0x00271000) libpthread.so.0 => /lib/libpthread.so.0 (0x009ee000) libdl.so.2 => /lib/libdl.so.2 (0x009bc000) libutil.so.1 => /lib/libutil.so.1 (0x00c0f000) libm.so.6 => /lib/libm.so.6 (0x009c3000) libc.so.6 => /lib/libc.so.6 (0x00861000) /lib/ld-linux.so.2 (0x0083d000) $ sudo make install
make install後、libpythonが/usr/libを参照しているので以下のように
ld.so.conf.dにpython266.confを追加しldconfigコマンドを実行します。
# vi /etc/ld.so.conf.d/python266.conf /usr/local/python266/lib <-記入
ldconfigを実行し設定を反映させます。
# /sbin/ldconfig
usr/local/python266に移動しpythonが2.6.6を指しているかを確認します。
$ cd /usr/local/python266 $ ./python -V Python 2.6.6 $ ldd python linux-gate.so.1 => (0x007a8000) libpython2.6.so.1.0 => /usr/local/python266/lib/libpython2.6.so.1.0 (0x0013a000) libpthread.so.0 => /lib/libpthread.so.0 (0x009ee000) libdl.so.2 => /lib/libdl.so.2 (0x009bc000) libutil.so.1 => /lib/libutil.so.1 (0x00c0f000) libm.so.6 => /lib/libm.so.6 (0x009c3000) libc.so.6 => /lib/libc.so.6 (0x00861000) /lib/ld-linux.so.2 (0x0083d000)
上記のpython2.6.6の設定が反映されるように、bashrcを以下のように追記しておきます。
$ vi .bashrc ...<略> #source /usr/local/pythonbrew/etc/bashrc export PATH=/usr/local/python266/bin:$PATH alias python='python2.6' export LD_LIBRARY_PATH=/usr/local/pyhon266/lib:$LD_LIBRARY_PATH
$ source .bashrc
distributeはsetuptoolsからフォークしたプロジェクトです。pip(easy_install)も
あわせてインストールされます。詳細については以下のURLをご覧ください。ここでは
0.6.16をインストールします。
http://pypi.python.org/pypi/distribute/
$ cd /home/beat/python-orig $ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.16.tar.gz $ tar xvfz distribute-0.6.16.tar.gz $ cd distribute-0.6.16 $ python setup.py build # python setup.py install --prefix=/usr/local/python266
指定しているディレクトリにインストールできているかの確認をします。
$ which easy_install /usr/local/python266/bin/easy_install
PILはpythonに画像処理機能を追加します。ここでは、PIL(Python Imaging Library)のバージョン
1.1.7をインストールします。PILの詳細は以下のURLをご覧ください。
http://www.pythonware.com/products/pil/
$ cd /home/beat/PIL/Imaging-1.1.7 $ python setup.py clean <-以前のビルド時の物を削除 $ python setup.py build $ sudo python setup.py install
セルフテストを行いPILが正しく設定されているかの確認とバージョンの確認をします。
$ python selftest.py -------------------------------------------------------------------- PIL 1.1.7 TEST SUMMARY -------------------------------------------------------------------- Python modules loaded from ./PIL Binary modules loaded from /usr/local/python266/lib/python2.6/site-packages/PIL ...<略> Running selftest: --- 57 tests passed.
mod_wsgiはpythonのアプリケーションをサポートするためのApacheのモジュールです。
使用するバージョンは3.3です。mod_wsgiの詳細については以下のURLをご覧ください。
http://code.google.com/p/modwsgi/
mod_wsgiのインストール前にapxsのインストールをします。apxsはAPache eXtenSion toolの略称です。
Apache のLoadModuleからmod soを呼び出すために使用しています。
mod_wsgiのビルド、インストール時にApacheのバージョン、pythonのバージョン違いによって正しく呼び出されないことを
防ぐためにインストールします。apxsの詳細については以下のURLをご覧ください。
$ sudo yum install httpd-devel
home/beat/mod_wsgiにmod_wsgi-3.3のアーカイブをダウンロードし展開しています。
$ cd /home/beat/mod_wsgi/mod_wsgi-3.3 $ ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/python266/bin/python $ make $ sudo make install $ ldd /usr/lib/httpd/modules/mod_wsgi.so linux-gate.so.1 => (0x009f4000) libpython2.6.so.1.0 => /usr/local/python266/lib/libpython2.6.so.1.0 (0x00df3000) libpthread.so.0 => /lib/libpthread.so.0 (0x004bc000) libdl.so.2 => /lib/libdl.so.2 (0x00fcc000) libutil.so.1 => /lib/libutil.so.1 (0x00a52000) libm.so.6 => /lib/libm.so.6 (0x00955000) libc.so.6 => /lib/libc.so.6 (0x0068d000) /lib/ld-linux.so.2 (0x0083d000)
サンプルpythonスクリプトでインストールしたmod_wsgiが動作しているかを確認します。
etc/httpd/conf.dにmodwsgi_test.confを作成し、以下のように追加します。WSGIPythonHomeには
python2.6.6のインストール先を記載します。hello.pyがサンプルです。
$ sudo vi /etc/httpd/conf.d/modwsgi_test.conf LoadModule wsgi_module modules/mod_wsgi.so WSGIPythonHome /usr/local/python266 WSGIScriptAlias /test /var/www/cgi-bin/hello.py
hello.pyは以下の内容を記載しています。
$ sudo vi /var/www/cgi-bin/hello.py #!/usr/local/bin/python-2.6 def application(environ, start_response): status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return ["It's works!"]
httpdを再起動します。
$ sudo /etc/init.d/httpd restart
正しく設定できている場合は、以下のURLにアクセスするとIt's works!の表示を確認することができます。
http://マシンのIPアドレス/test
OpenCVは画像解析などのコンピュータビジョン向けのソフトウェア ライブラリです。
上記までにインストールしたpython2.6.6にOpenCV-2.2.0をバインド、ビルド後
インストールします。OpenCVの主なオプションとしては以下のとおりです。
ffmpeg:disable TTB:disable OpenMP:enable pythonは2.6.6にバインド
OpenCVの詳細については以下のURLをご覧ください。
cmakeが標準リポジトリにないためepelからインストールをします。
注:epelにはopencvもありますが今回はpython2.6.6とのバインドをするため使用ません。
# yum search cmake --enablerepo=epel
home/beat/OpenCV/OpenCV-2.2.0/releaseディレクトリでビルドを行います。
インストール先は/usr/local以下を指定しています。
http://opencv.jp/opencv2-x-tips/install-linuxubuntu
$ cd OpenCV $ tar xvfj OpenCV-2.2.0.tar.bz2 $ cd OpenCV-2.2.0 $ mkdir release $ cd release $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D ENABLE_OPENMP=ON ../ ...<略>option情報 ... -- General configuration for opencv 2.2.0 ===================================== -- -- Built as dynamic libs?: ON -- Compiler: -- C++ flags (Release): -Wall -pthread -march=i686 -ffunction-sections -O3 -DNDEBUG -fomit-frame-pointer -O3 -ffast-math -msse -msse2 -mfpmath=387 -DNDEBUG -- C++ flags (Debug): -Wall -pthread -march=i686 -ffunction-sections -g -O0 -ggdb3 -DDEBUG -D_DEBUG -- Linker flags (Release): -- Linker flags (Debug): -- -- GUI: -- GTK+ 2.x: 1 -- GThread: 1 -- -- Image I/O: -- JPEG: TRUE -- PNG: TRUE -- TIFF: build -- JPEG 2000: build -- OpenEXR: NO -- -- Video I/O: -- DC1394 1.x: 0 -- DC1394 2.x: 0 -- FFMPEG: 0 -- codec: 0 -- format: 0 -- util: 0 -- swscale: 0 -- gentoo-style: -- GStreamer: 0 -- UniCap: FALSE -- PvAPI: -- V4L/V4L2: / -- Xine: FALSE -- -- Interfaces: -- Python: ON -- Python interpreter: /usr/local/python266/bin/python2.6 -- Python numpy: NO (Python interface will not cover OpenCV 2.x API) -- Use IPP: NO -- Use TBB: NO -- Use Cuda: No -- Use Eigen2: NO -- -- Documentation: -- Build PDF NO -- Doxygen HTMLs YES -- -- Install path: /usr/local -- -- cvconfig.h is in: /home/beat/OpenCV/OpenCV-2.2.0/release -- ----------------------------------------------------------------- -- -- Configuring done -- Generating done -- Build files have been written to: /home/beat/OpenCV/OpenCV-2.2.0/release $ make
opencv_test_coreコマンドを実行しセルフテストを行います。
$ ./bin/opencv_test_core ...<略> [49f4d0d1dc035294] stat-sum: .................................................... Ok ================================================= Summary: 0 out of 78 tests failed Running time: 00:01:02
make installでインストーし/usr/local以下にOpenCVの各ファイルがインストールされていることを
確認できれば完了です。
$ sudo make install $ cd /usr/local/bin $ ls opencv_createsamples opencv_haartraining opencv_performance opencv_traincascade