カテゴリー別アーカイブ: Python

MacPortsでUniversal Binary をビルド


Skype4Pyを使ってSkypeを操作しようと思ったのだが、

# python skype.py

Segmentation fault: 11

セグメンテーションエラーとなってよくわからんエラーになってしまった。

調べていくと
# arch -i386 python hoge.py

アーキテクチャを指定して実行すればいいとか言う情報を見つけたのだが

arch: posix_spawnp: python2.7: Bad CPU type in executable

エラー。。。python自体が、i386アーキテクチャに対応してないっぽい。

ってことでどうやったらi386対応のpythonを入れることが出来るのか、って事で調べた結果が

+universal

をつければいいらしい。

実行したコマンドが

# sudo port install python27 +universal

とりあえず実行して、

# arch -i386 python skype.py

で無事動きました。

LeopardからアップデートしたLionなのだがデフォルトで入っていた。
Python 2.5.6
では普通に動いていたので悩んだ。


PythonでUnicodeEncodeError: ‘ascii’ codecがでた場合


Python には日本語を表す為にバイト文字列とUnicode文字列があり、
それらを比較すると、

>>> if "日本語" == u"日本語":
... print "ok"
...
Traceback (most recent call last):
File "", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

こんなエラーが発生します。

僕が使っているのはPython2.4なので、他のバージョンはちょっとわからないのですが、
多分、一緒な対応で行けると思います。


#vi /usr/lib/python2.4/site-packages/sitecustomize.py
import sys
sys.setdefaultencoding('utf-8')

上記を実行
そのあと再度

>>> if "日本語" == u"日本語":
... print "ok"
...
ok

を再度実行。

エラーが出ずに「ok」が出力されれば成功です。

僕の場合、2つ環境あったのですが、一方の環境では、設定した記憶がないのに、この設定がされていました。
どちらもCentOS5でyumで入れたpythonです。
原因はわかりませんが、エンコードの問題が解決したので一安心です。