[[Python]] [[labs.beatcraft.com]] [[Python]]~ #contents * Python2.6.6/CentOS5 [#e70cb2fe] CentOS 5.6(32bit版)にpython2.6.6をインストールする手順とpython2.6.6にあわせた~ PIL(Python Imaging Library)、mod_wsgi、OpenCVをインストールする手順を記載します。~ ~ python2.6.6は他のバージョンや導入済みのバージョンと分ける為に、デフォルトの~ インストールディレクトリではなく、/usr/local/以下のディレクトリにインストール先を指定しています。~ ~ * CentOS5 [#pdb8dc9e] CentOS 5.5(32bit)をインストールしています。update後CentOS 5.6に更新されます。~ ** Install [#y34c21d0] 以下のような設定でCentOS 5.5をインストールしています。~ パッケージ:Server (NoGUI) 言語、キーボード: Japanese パーティション:default パーティション ネットワーク:DHCP システムタイム:UTC FireWall,SELinux :Disable また、以下のパッケージの追加と削除を行っています。~ customパッケージ 追加パッケージ:開発ツール、開発ライブラリ 削除パッケージ:DNSネームサーバ削除 ** CentOSの設定[#j685f802] 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 *** ntp [#q382dc82] 上記設定では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 ** 導入済みpythonの確認 [#ed52dbbd] 上記手順で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 ** python2.6系の設定 [#ifcf77c0] CentOSの標準リポジトリでは2.4系のバージョンしか取得できないのでepelのリポジトリを追加し~ python26をインストールします。epelはExtra Packages for Enterprise Linux の略称です。~ 標準リポジトリでは導入できない様々なパッケージを追加することができます。~ ~ epelのリポジトリを追加しpython2.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の導入 [#y9ea3faa] 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 [#gb29ce3f] 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 [#g39f3605] 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 [#le5af911] 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をご覧ください。~ ~ - apxs -- http://httpd.apache.org/docs/current/programs/apxs.html - mod_wsgi_installation issues -- http://code.google.com/p/modwsgi/wiki/InstallationIssues ~ $ 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 [#a65ac293] OpenCVは画像解析などのコンピュータビジョン向けのソフトウェア ライブラリです。~ 上記までにインストールしたpython2.6.6にOpenCV-2.2.0をバインド、ビルド後~ インストールします。OpenCVの主なオプションとしては以下のとおりです。~ ffmpeg:disable TTB:disable OpenMP:enable pythonは2.6.6にバインド OpenCVの詳細については以下のURLをご覧ください。~ http://opencv.jp/ ~ *** cmakeの導入 [#w9c8d579] cmakeが標準リポジトリにないためepelからインストールをします。~ 注:epelにはopencvもありますが今回はpython2.6.6とのバインドをするため使用ません。~ # yum search cmake --enablerepo=epel *** OpenCV-2.2.0 [#l0cbb1be] 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