Windows, Apache, mod_python な環境で virtualenv 上の django を動かしてみた

環境構築に使ったリポジトリはここ
https://bitbucket.org/toruuetani/virtualenv-modpython-test

基本的にはここのまま。
http://mydjangoblog.com/2009/03/30/django-mod_python-and-virtualenv/

なぜ必要か

Pythonはsite-packages以下にすべてのライブラリをインストールするため、プロジェクト毎に使うライブラリが異なる場合に困ったことになる。それを解決するのが virtualenv で、サンドボックスを作成できる。

なので最近は virtualenv で環境を構築して、そこに必要なライブラリをインストールして使うようにしている。Django でアプリを作る場合も当然 virtualenv 上で作るわけなんだけども、最終的には Apache で動かすことになる。そこで virtualenv 環境のライブラリを Apache, mod_python から使えるか実験してみた。※ 過去のプロジェクトを動かしたかったので、python2.5&mod_pythonを使っている。

構築手順

D:/Work/venv_test を作業ディレクトリとする。PythonApachemod_pythonをダウンロードしておく。

1. python 2.5をインストール

2. virtualenv.py を D:/Work/venv_test にコピー

3. C:\python25\python.exe virtualenv.py . --no-site-package

4. Apache を D:/Work/venv_test/apache にインストール

5. D:/Work/venv_test/Scripts/activate.bat を実行

6. easy_install -UZ django

7. easy_install -UZ mod_python-3.3.1.win32-py2.5-Apache2.0.exe

8. 以下の内容でmypython.pyを保存

activate_this = 'D:/Work/venv_test/Scripts/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

from django.core.handlers.modpython import handler

9. D:/Work/venv_test/apache/conf/httpd.conf に以下の設定を追記

Alias /static "D:\Work\venv_test\djtest\static"
LoadModule python_module "D:\Work\venv_test\Lib\site-packages\mod_python-3.3.1-py2.5-win32.egg\mod_python_so.pyd"
<VirtualHost 127.0.0.1:80>
    <Location "/">
        SetHandler python-program
        PythonPath "['D:\Work\venv_test\Lib\site-packages', 'D:\Work\venv_test'] + sys.path"
        PythonHandler mypython
        SetEnv DJANGO_SETTINGS_MODULE djtest.settings
    </Location>
    <Location "/static">
        SetHandler None
    </Location>
</VirtualHost>