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 もちゃんと動いたしね! でも、ちょっと疲れたので UbuntuDjango アップデートはまた今度。

追記

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
Tags: 
Django
Mac
Python
Trackback: 
http://humming.via-kitchen.com/2007/08/27/update-django-on-mac/trackback/

TrackBacks

まだ登録されていません。

Comments

まだ登録されていません。

Add Comment

Add Comment