isTKS™program,Python ≫ Python3 + mod_wsig3.3 + Apache2.2 でHelloWorldをブラウザ表示

Python3 + mod_wsig3.3 + Apache2.2 でHelloWorldをブラウザ表示

2011.01.31

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を表示させるまででした。

  • このエントリーをはてなブックマークに追加