2010年05月18日

さくらレンタルサーバのpython環境をUTF-8に


python上でXMLをしこしこいじるテストしてたらこんなエラーが出た。

UnicodeEncodeError: 'ascii' codec...(云々)

いつもどおりググるとpythonのデフォルト文字コードがasciiになってて、UTF-8の文字列扱おうとすると出るんだって。



(0)事前調査

−−−−−−−

[OS] python
Python 2.6.2 (r262:71600, Jun 17 2009, 12:25:19)
[GCC 4.2.1 20070719 [FreeBSD]] on freebsd7
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>>

−−−−−

んで調べたところデフォルトエンコーディングをpythonの設定ファイルであるsitecustomize.pyを設定しなけらばならないらしい。
とはいえレンタルサーバなので設定ファイルをいじれない→新規にpythonをローカルインストール(用語あってる?)してそれを有効にしつつ設定ファイルいじらなあかんのか。
面倒くせぇ



(1)pythonローカル環境インスコ

へーlocal-pythonってあるんだ。
そして前回mySQL環境つくるのに深い階層($HOME/chroot/usr/local〜)にインスコしたことを後悔するオレ。

−−−−−

[OS] cd $HOME/chroot/usr/local/src
[OS] http://peak.telecommunity.com/dist/virtual-python.py
[OS] python virtual-python.py --prefix=~/chroot/usr/local

−−−−−



(2)環境設定

パスきったりとか。
bash使うことにしたのでsetenvでなくexport(ということも今知った)
太字部分追加。あとモジュールサーチの順番ってPATH切ってある前からのような気もしたのでなんとなく前に書いてみた。

−−−−−
[OS] vi $HOME/.bash_profile
.....
export PATH=PATH=$HOME/chroot/usr/local/bin:$PATH:$HOME/local/bin
export PYTHONPATH=$HOME/chroot/usr/local/lib/python2.6/site-packages:$HOME/chroot/usr/local/bin
−−−−−

あと今回目的のsitecustomize.py

−−−−−
[OS] vi $HOME/chroot/usr/local/lib/python2.6/site-packages/sitecustomize.py

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


−−−−−



(3)確認
環境再読み込みのためにログアウト&ログインしなおしてから

−−−−−−−

[OS]$ python
Python 2.6.2 (r262:71600, Jun 17 2009, 12:25:19)
[GCC 4.2.1 20070719 [FreeBSD]] on freebsd7
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>>

−−−−−


よかったよかった。
でも最初の問題のXMLいじってのasciiエラーは解決せず。

これでも一歩前進...なのか?

しかし何かしようとすると環境が邪魔すんのね。
何時になったら「何か」できることやら...。
posted by wani at 17:45 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする