MacのDjangoをsvn-trunkに。
Macの Django を0.96からsvn-trunkにしてみたメモ。
とりあえずは svn でソースを落としてくる。 どこに置いても良いみたいなので、今回は /usr/local/src/Django に置いた。
$ cd /usr/local/src
$ svn co http://code.djangoproject.com/svn/django/trunk ./Django
落として来たソースの中にある django なディレクトリを、 シンボリックリンクとかで site-packages に入れてやれば良いらしい。 ので、既存の Django - 0.96と置き換える形になる。
$ cd /usr/local/python/lib/python2.5/site-packages
$ sudo rm -rf ./django
$ sudo rm Django-0.96-None-py2.5.egg-info
$ sudo ln -s /usr/local/src/Django/django ./django
ココでひとまずバージョン確認しておく。
>>> import django
>>> django.VERSION
(0, 97, 'pre')
とりあえずは上手く行っている模様。 まぁ、転ぶところなんて無い訳ですが。
で、エラー吐くと分かっていながらも、 ブログのソースを runserver してみる。
$ ./manage.py runserver
Validating models...
0 errors found
Django version 0.97-pre-SVN-6022, using settings 'applications.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
意外にも素直に立ち上がってくれた。 じゃあ、って事で意気揚々とブラウザから確認。
が、しかし。
Exceptionが飛んでる。 LookupError だそうです。 unknown encoding: X-MAC-JAPANESE らしく、完全にMac固有の問題っぽい。 どうやら locale モジュールの getdefaultlocale が悪さ?をしてるらしく、 インタラクティブシェルで確認してみる。
>>> import locale
>>> locale.getdefaultlocale()
(None, 'X-MAC-JAPANESE')
ちなみにコイツ、言語環境で英語に切り替えて試すと mac-roman に変わった。 それだと Django は元気よく動いてくれた。 けど、環境ほぼ全てが英語になってしまう。それはちょっと犠牲多過ぎ。
ちょっとGoogleさんに相談してみるといくつか情報を発見。
まずは1個目方法を試す。と、ちゃんと動く。 なるほど、目指す場所は理解出来た気がする。
2個目の方法は getdefaultlocale ではないものの、 たぶん根っこの部分は同じだと思う。という勝手な思い込み。 別のライブラリとかで同じエラーに出くわすのもアレなので、 今回はこちらの方法で対処する事にした。
具体的には Python ソースツリーの Modules/_localemodule.c に以下を追記してリコンパイル。 これで良いのかは分かりませんけれども。
static char *mac_getscript(void)
{
CFStringEncoding enc = CFStringGetSystemEncoding();
static CFStringRef name = NULL;
/* Return the code name for the encodings for which we have codecs. */
switch(enc) {
case kCFStringEncodingMacRoman: return "mac-roman";
case kCFStringEncodingMacGreek: return "mac-greek";
case kCFStringEncodingMacCyrillic: return "mac-cyrillic";
case kCFStringEncodingMacTurkish: return "mac-turkish";
case kCFStringEncodingMacIcelandic: return "mac-icelandic";
/* ココを追加 */
case kCFStringEncodingMacJapanese: return "utf-8";
/* XXX which one is mac-latin2? */
}
if (!name) {
/* This leaks an object. */
name = CFStringConvertEncodingToIANACharSetName(enc);
}
return (char *)CFStringGetCStringPtr(name, 0);
}
リコンパイル後にもう一度インタラクティブシェルでテスト。
>>> import locale
>>> locale.getdefaultlocale()
(None, 'utf-8')
上手くいったっぽい! Django もちゃんと動いたしね! でも、ちょっと疲れたので Ubuntu の Django アップデートはまた今度。
追記
X-MAC-JAPANESE に一番近いのはshift_jisだそうです。なので、utf-8を返すのは間違い。詳しくは Django-ja (at Lingr) > Archives > September 07, 2007 をご覧ください!
今後、気をつけます。
- Posted at:
- 2007/08/27 19:24:07
- 0 Comments
- 0 TrackBacks
- Trackback:
- http://humming.via-kitchen.com/2007/08/27/update-django-on-mac/trackback/
TrackBacks
まだ登録されていません。
Comments
まだ登録されていません。