2012/02/21

sitecustomize.py の設置位置がわからなくてハマった件


ここのところホントにAndroidはどこへやら。
最近はPythonの勉強をしております。


今回は手短にメモだけ
で、WSGIの基本的な動きを確認していたところハマった問題が以下のエラー。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 107: ordinal not in range(128)
※ 実際に出てたものです。

テンプレートに日本語が入っている場合に発生して、当然この時はブラウザにもエラーの文字が。
原因は文字コード周りのことだろうということで調べてみると、
解決方法として sitecustomize.py に以下の記載してデフォルトエンコーディングをasciiからUTF-8にすれば良いとのこと。

import sys
sys.setdefaultencoding('utf-8')

と、ここまではすぐにたどり着くけどハマったのはここから。

sitecustomize.py を書いてみたはいいが置き場所がわからない

ちなみに僕は状況によってWindowsを使ったりMacを使ったりUbuntu使ったりとしてるんでなおさらハマりました。。
結論から言うと以下のパスの配下に置けばOK。

  • Windowsの場合
    <Pythonのインストールパス>\Lib\site-packages 
  • MacOSX(Lion)の場合
    /Library/Python/2.7/site-packages 
  • Ubuntu(11.04)の場合
    /etc/python2.7 
特にUbuntuの場合 /usr/local/lib/python2.7 だったり /usr/lib/python2.7 の下だったりと色々あさってまさかの /etc 配下。。
と、、かなりハマりました。。

ともかく無事すべての環境でのエラーが回避できました。

ちなみにpythonのデフォルトエンコーディングはインタラクティブシェルから直接
>>> import sys
>>> sys.getdefaultencoding()
とするのが一番楽で確実です。

最後に
設置場所に関する情報が案外なかったのでメモとして書いてみました。
まあ「これくらい分かれよ!」ということなんでしょうかね。。

引き続き勉強頑張っていきます!