カカドゥ開発者ブログ

株式会社カカドゥのエンジニアブログです。Python, Django, SEO成分が多めです。

PythonのインタプリタでCtrl-Lや矢印が使えないときの解決方法

こんにちはカカドゥの増田です。

Ubuntu 15.04で、自分でPython2.7.10をビルドした際、Pythonのインタプリタ(インタラクティブシェル)で、Ctrl-LやCtrl-A、Ctrl-E、矢印キーなどが使えず困ってたのですが、解決策が分かったので記録。

f:id:masutaro:20150919214628p:plain

原因は、Pythonをビルドしたときに、GNU readlineというライブラリが入っていなかったため。そのため、該当のライブラリをインストールしてからビルドしなおせば解決できました。

Pythonのドキュメントには以下のように書かれています。

通常、インタプリタの行編集機能は、あまり洗練されたものではありません。 Unix では、インタプリタをインストールした誰かが GNU readline ライブラリのサポートを有効にしていれば、洗練された対話的行編集やヒストリ機能が利用できます。コマンドライン編集機能がサポートされているかを最も手っ取り早く調べる方法は、おそらく最初に表示された Python プロンプトに Control-P を入力してみることでしょう。ビープ音が鳴るなら、コマンドライン編集機能があります。編集キーについての解説は付録 対話入力編集とヒストリ置換 を参照してください。何も起こらないように見えるか、 ^P がエコーバックされるなら、コマンドライン編集機能は利用できません。この場合、現在編集中の行から文字を削除するにはバックスペースを使うしかありません。

出典:2. Python インタプリタを使う — Python 2.7ja1 documentation

解決方法

解決方法は2通りあります。下記いずれかを行ってからPythonインタプリタを起動すると、Ctrl-Lや矢印が使えるようになってるはずです。

1. readlineのライブラリをインストールしてPythonをビルドしなおす

$ sudo apt-get install libreadline-dev

2. Pythonパッケージのreadlineをpypiからインストールする

Mac OSXのような、GNU readlineが入っていないプラットフォーム用のものらしい。

$ sudo pip install readline