Python3 + mod_wsig3.3 + Apache2.2 でHelloWorldをブラウザ表示
Python3 + mod_wsig3.3 をインストールしてHelloWorldを表示させるまでの流れを書いておきます。
環境は
CentOS5.5 x64
Apache 2.2
です。
# su - >password
Python-3.1.3のコンパイル&インストール
Pythonの最新版は
http://www.python.jp
のダウンロードから。
# cd /usr/local/src # wget http://www.python.org/ftp/python/3.1.3/Python-3.1.3.tgz # tar zxvf Python-3.1.3.tgz # cd /usr/local/src/Python-3.1.3 # ./configure # make # make install
インストール確認
# python -V Python 2.4.3
pythonを実行すると既存python2.4が実行されるようです。
# python3 -V Python 3.1.3
python3を実行するとPython3.1.3が実行されるようです。
python3の設置場所の確認をしておきます。
# whereis python3 python3: /usr/local/bin/python3.1 /usr/local/bin/python3 /usr/local/bin/python3.1-config /usr/local/lib/python3.1
Python単体ではPythonが動くようになりました。
これを次はApacheのmoduleとして起動させ、Webサーバ上でPythonが動くようにします。
mod_wsigのインストール
パフォーマンスを考えて、CGIではなくApacheのmoduleとしてPythonを動かせるようにします。
Apacheのmoduleとして動かすには、mod_pythonもありますがそちらはバグがあるとのことで、いまのところはmod_wsgiがよいとのこと。
mod_wsgiはもしかするとPython3には正式に対応してないかもしれません。ちょっとその辺は自信がないので気になる方はPython2系でインストールされるほうがいいです。
http://code.google.com/p/modwsgi/downloads/list
から最新版を持ってきます。
# wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz # tar zxvf mod_wsgi-3.3.tar.gz # cd mod_wsgi-3.3 # ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/bin/python3.1 /usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_wsgi.la -rpath /usr/lib64/httpd/modules -module -avoid-version mod_wsgi.lo -L/usr/local/lib -L/usr/local/lib/python3.1/config -lpython3.1 -lpthread -ldl -lutil -lm /usr/bin/ld: /usr/local/lib/libpython3.1.a(node.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libpython3.1.a: could not read symbols: Bad value collect2: ld returned 1 exit status apxs:Error: Command failed with rc=65536 . make: *** [mod_wsgi.la] エラー 1
ここでエラーが。
recompile with -fPICって言われてしまいました。
これは64bitで起こる症状みたいです。
http://agiletesting.blogspot.com/2007/10/compiling-modpython-on-rhel-64-bit.html
Python3とmod_wsgiのコンパイル時に
CFLAGS=-fPIC –enable-shared
を追加してインストールします。
Python-3.1.3のコンパイルをもう一度
# cd /usr/local/src/Python-3.1.3 # ./configure CFLAGS=-fPIC --enable-shared # make # make install
mod_wsgiのコンパイルをもう一度
# cd /usr/local/src/mod_wsgi-3.3 # ./configure CFLAGS=-fPIC --with-python=/usr/local/bin/python3 # make # make install chmod 755 /usr/lib64/httpd/modules/mod_wsgi.so
今度はエラーが出ないでmod_wsgi.soが生成されてインストールできました。
次にApacheにこのmodule(mod_wsgi.so)を読み込ませてブラウザにHelloWorldを表示させます。
Apacheにmoduleを読み込ませて再起動
# vim /etc/httpd/conf.d/mod_wsgi.conf LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias /hello /var/www/html/hello.py # service httpd restart
この設定を書いてapache再起動をすると、mod_wsgi.soをapacheが読み込んでくれて、
example.com/helloあてのリクエストで、 /var/www/html/hello.pyのスクリプトを動かしてくれるようになります。
conf.d以下に書いてますが、httpd.confに書いてもいいです。
HelloWorldを書いて表示させる
#vim /var/www/html/hello.py def application(environ, start_response): status = '200 OK' output = 'Python3 Hello World!' response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output]
で、http://example.com/helloをブラウザ確認すると、
Python3 Hello World!
が表示されました。
Djangoを動かすまでをこのエントリーに書こうと思ったのですが、いま現在DjangoはPython3.X系には対応されていないみたいでした。
以上、Python3 + mod_wsig3.3 をインストールしてHelloWorldを表示させるまででした。