2012年1月8日日曜日

Django

Python製WebフレームワークDjango。楽しいです。楽しいというか楽チン。
0.96の頃に作ったサイトの保守とかしていてなかなか最新版を追従できていないですが、それでも新しく始めるときはなるべく最新のDjangoを使いたいもの。

そこでDjangoをシステムにインストールしてしまわず、プロジェクトの中に内包することで、1つのシステム(1台のサーバ)上に複数のバージョンのDjango環境を作っています。
ポータビリティが高いので「じゃんごーぽーたびりてぃ」と呼んでいました(^^ゞ
(番号ポータビリティが話題になっていた頃だったので…)


通常インストールすると、ライブラリパスの通った lib/site-packages/ あたりに django ディレクトリが作られます。
でもこれは
from django.conf import settings
みたいなコードが通るように、ライブラリパス上に django ディレクトリがあればよいわけで。
sys.path に django ディレクトリの親ディレクトリを追加すれば同じコトが実現できます。

よくやる設定はこんな感じ。

/path/to/project/django/ ← djangoディレクトリ一式
/path/to/project/htdocs/ ← djangoサイトソース一式(settings.py manage.py urls.py etc...)
※サイトソースは任意のディレクトリ名でよいですが、 site/ は既存の siteモジュールと名前がぶつかるのでNG。なんとなく htdocs にしてます。

manage.py の先頭に
import sys
import os
PROJECT_ROOT = os.path.normpath(os.path.join(os.getcwd(), os.path.dirname(__file__), '..'))
if PROJECT_ROOT not in sys.path:
    sys.path.insert(0, PROJECT_ROOT)
こんなオマジナイを入れておきます。
manage.py のあるディレクトリ(/path/to/project/htdocs/)の1つ親(..)のディレクトリ(/path/to/project/)を sys.path の先頭に入れています。
これで django.conf も htdocs.settings もimportできるようになりました。
'/path/to/project/htdocs/' という直値を入れるとポータビリティが下がってしまうので親ディレクトリは動的に見つけます。このコードであればWindows環境でもPOSIX環境でもOS X上でも修正せずに動かせます。

./manage.py runserver 0.0.0.0:8000
でローカルサーバを動かせばちゃんと一通り動作できます。
Djangoのインストールは必要ありません。

django-admin.py を動かしたいときは
setenv PYTHONPATH /path/to/project/
(bashの場合は export PYTHONPATH=/path/to/project/)
してから
/path/to/project/django/bin/django-admin.py
すればOKです。

0 件のコメント:

コメントを投稿