haya14busa

haya14busa’s memo

Mac OSXのPythonのインタラクティブシェルorインタプリタで日本語が入力出来なくてつらい

参考リンク

環境

  • Mac OSX 10.8.4
  • Python 2.7.5 (Homebrewでインストール)

MacのPythonインタプリタで日本語が入力出来なくてつらい。つらい

Snow Leopardだとeasy_install readlineで解決するって記事がもう嫌になるほど見つかるけど僕の環境では全く解決しません。

ただなんにせよreadlineの問題であることはわかりました。

単にreadlineといっても

  1. Mac標準のreadline
  2. Homebrewで入れるreadline
  3. easy_installで入れるreadline
  4. pipで入れるreadline

もう何がなんだか…。1と2はライセンスの関係で少し違うらしいこと、3と4は同じかと思いきやHomebrewのreadlineをアンインストールした状態で3のeasy_installでは上手くimportできるのに、4のpipではimportエラーが発生します。

Homebrewでのreadlineをアンインストールした状態で,pip install readlineした時のエラー

ImportError: dlopen(/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.2.dylib
  Referenced from: /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/readline.so
  Reason: image not found

readlineの問題だと考えるのはHomebrew、easy_install、pipのすべてでreadlineをアンインストールした場合、ちゃんと日本語が通ります。ただ勿論readlineが使えないので補完はおろか矢印キーさえ動きません。これはツライ。

1-4でいろんな組み合わせでreadlineをインストール&アンインストールしてもimportできた場合はすべて日本語通りません…

.zshrc

export PYTHONSTARTUP=~/.pythonstartup
export PYTHONIOENCODING='utf-8'

.pythonstartup

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

import codecs

sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
sys.stdin = codecs.getreader('utf_8')(sys.stdin)

上記の2つを設定して、Pythonシェルでのエンコーディングをすべてutf-8にしても解決せず。utf-8に変更する前はUS-ASCIIだったんでこれが問題かと思ったんだけど……

Python インタプリタ

import sys
>>> print sys.getfilesystemencoding()
utf-8
>>> print sys.stdin.encoding
utf-8
>>> print sys.stdout.encoding
utf-8
>>> print sys.stderr.encoding
utf-8
>>> print sys.getdefaultencoding()
utf-8

もちろんLANG=ja_JP.UTF-8状態にもしてるし、ターミナルではちゃんと日本語入力できるのに…

brew link readlineとかやったり、brewで入れたreadlineを使うように(?)Homebrew使わず自前でPython入れなおしてみたりいろいろとやってみた………が………だめ

% CPPFLAGS=-I/usr/local/Cellar/readline/6.2.4/include LDFLAGS=-L/usr/local/Cellar/readline/6.2.4/lib  ./configure --prefix=/usr/local/Cellar/python/2.7.5 --enable-ipv6 --datarootdir=/usr/local/Cellar/python/2.7.5/share --datadir=/usr/local/Cellar/python/2.7.5 --enable-framework --with-universal-archs=intel --enable-universalsdk=/

% make
% sudo make frameworkinstall

書きながら調べてたらここを見つけた。-> Pythonビルドメモ(2013/02/09版) – 日々の御伽噺

というか参考にしてたリンクの更新版的な記事だったのでやっぱ検索力足りてない…試してみようかな

追記

なんとか解決できました

解決:Mac OSXのPythonのインタプリタで日本語入力する方法 « haya14busa

Comments