[python]MacPortsで入れたpython25をApacheで動かすには?

カテゴリ: python / author: uechoco / 2010年08月09日 12:11:06
この記事を読む時間:67くらい

最近Pythonを始めたのは皆さんご存知かと思いますが、PythonはWebに特化していないのが厄介ですね。phpはWebに特化していてCLIも出来るというイメージですが、Pythonは軽量でなんでもできる言語なのでWebも出来るというのが現時点での私のイメージです。

Webサーバのデーモンと言ったらやっぱりApacheが多いかと思いますが、PythonをApacheで動かすにはどうしたらいいんでしょうか。『入門Trac』に書いてあったのとかを参考に思いつくものを並べてみました。

  • mod_python ... 古くからあり、おそらく資料も豊富なはず。ただし、開発プロジェクトは公式に終了宣言されているらしい
  • mod_fastcgi/mod_fcgi ... FastCGI系。FastCGI自体の理解はあまりないのだが、CGIで動かしている+αと考えれば、CGIに分類されるはず。
  • mod_wsgi ... WSGIというインタフェースに対応したモジュール。mod_pythonの代わりとして徐々に定着しつつある?mod_pythonやmod_fastcgiなどよりは多少速いとか。

他にも、Apacheで動かさないという選択肢もあるようです。フレームワーク自体にサーバ機能が含まれているWeb2pyとかがそうなのかな。Nginxとかはわからないので、別の機会に。

さてさて私のPythonはGAE開発環境を意識して、SnowLeopardにMacPortsで入れたpython25です。ApacheもMacPortsで入れたapache2です。python_selectでSnowLeopard標準のpython26-appleからpython25に切り替えています。

できればMacPortsでモジュールを入れたいです。個人的にはFastCGIは馴染みがないのでmod_wsgiか、mod_pythonに的を絞ります。MacPortsでmod_wsgiをsearchすると、どうやらpython26(標準のともpython25とも違うMacPortsオリジナルのPython 2.6)に依存してしまっているので、python25では使えなさそうです(ソースコード インストールとかはわかりません)。mod_pythonをsearchすると、mod_python25やmod_python26などがあり、mod_python25であれば私がインストールしたpython25に依存しているようです。

早速「sudo port install mod_python25」でインストールし、

TEXT:
  1. ########################################################
  2. # to enable mod_python add
  3. #  LoadModule python_module modules/mod_python.so
  4. # to your apache2 config file:
  5. #  /opt/local/apache2/conf/httpd.conf
  6. ########################################################

というメッセージが表示されるので、LoadModule宣言を指定のhttpd.confに書き込み、Apacheをgracefulします。

続いて、3.3 mod_python は一体何をやっているのかを参考に、VirtualHostの設定やリクエストハンドラを設定しておきます。私の場合は以下のような感じにしています。もちろんtest.localpyというのは架空のドメインですので、/etc/hostsにも登録してあります。

TEXT:
  1. <VirtualHost *:80>
  2.     ServerName test.localpy
  3.     DocumentRoot "/Users/dev/py_works/test.localpy"
  4.     <Directory "/Users/dev/py_works/test.localpy">
  5.         Allow from all
  6.         AddHandler mod_python .py
  7.         PythonHandler mptest
  8.         PythonDebug On
  9.         DirectoryIndex mptest.py
  10.     </Directory>
  11.     ErrorLog "logs/test.localpy-error_log"
  12.     CustomLog "logs/test.localpy-access_log" common
  13. </VirtualHost>

あとは、上記DocumentRootにmptest.pyというファイルを作成し、以下のプログラムを記載します。

PYTHON:
  1. from mod_python import apache
  2.  
  3. def handler(req):
  4.     req.content_type = "text/plain"
  5.     req.write("Hello Apache mod_python!")
  6.     return apache.OK

あとは指定のURL(私の場合はhttp://test.localpy/)にアクセスすればOKです。DirectoryIndexが効かない場合は、http://test.localpy/aaa.pyみたいに適当なファイル名をつけてみてください。適当なファイル名でもいい理由は3.3 mod_python は一体何をやっているのかに書いてあります。

とりあえず、Webで動いたー!でもちょっとやりづらいのはphpでMVCフレームワークとかに慣れ過ぎなせいですかね。


コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2012 うえちょこ@ぼろぐ. WP Theme created by Web Top.