Qt Console でラグジュアリーな IPython

気付いてはいたんですよ、PythonのScriptsフォルダにipython-qtconsole.exeがいるのを。
ダブルクリックしても起動しないんで無視してました。

ところが、↓の記事を見て、使ってみたらとてもいいものだった!!
かっこ良くなったipython 0.11のqtconsoleを試す。: YATSTUKE BLOG

というわけでQt Console版のIPythonを使ってみる。(ほぼ元記事と内容がかぶっちゃいましたが……)

1.インストール

以下の環境を想定

OS Windows7 (x86)
Python 2.7.2
IPython 0.12
(1) PyQt4 のインストール

↓からPyQt-Py2.7-x86-gpl-4.9-1.exeを入手してインストール。
Riverbank | Software | PyQt | PyQt4 Download
とりあえずインストールタイプを"MINIMAL"にしてQt Runtimeのみ入れれば良い。

(2) pyzmq のインストール

pip install pyzmq でうまく入らなかったので早々にあきらめて↓からpyzmq-2.1.11.win32-py2.7.msiを入手して実行。
Downloads · zeromq/pyzmq · GitHub

Windows はインストーラが用意されている場合が多いのがいいね。

(3) pygments のインストール

pip install pygments でインストール。バージョン1.4が入った。

これでリッチなQt Console 生活を始める準備が整った。

2.使い方

Python インストールフォルダ配下のScriptsフォルダにあるipython-qtconsole.exeを起動。

とりあえず色々入力してみよう。

  • 入力するとimportやdefなどの予約後やモジュール名・メソッド名などが自動的にシンタックスハイライトされる!
  • 括弧にカーソルを合わせると対応する括弧が強調表示される!
  • コマンドライン引数で --pylab=inline を指定するとMatplotlibのプロットがコンソールないに表示される!
  • コピー・カット・貼り付けがCtrl + c、Ctrl + x、 Ctrl + v !
  • 画面の入力・出力した内容をhtmlファイルとして保存できる!
  • Tabキーでの候補表示でプロンプトが改行しない!
  • Ctrl + Enter で複数行の入力が可能!(履歴も複数行で出てくる)
  • タブでコンソールを複数開ける!
    • 同じセッションで開くことも、新しいセッションで開くこともできる!
  • 入力・出力内容をhtml/xhtml形式でエクスポートできる!(グラフも!)
  • 全てのマジック関数がメニュー上から実行できる!
  • なにげにチートシートを表示できるのがいいかも!

リッチすぎて目眩がする。こんなに便利でいいのか!
f:id:meganehouser:20120106005230p:image

3.フォントの変え方

デフォルトの文字がちょっと小さいと感じるなど、フォントの設定を変更したい場合は以下の通り。

(1) IPython の profile の作成

コマンドプロンプトから以下を実行する。

ipython profile create <プロフィール名>
※<プロフィール名>は任意の文字列
(2) profile の修正

(1)により以下にprofileフォルダが作成される。

C:\Users\<現在のユーザ名>\.ipython\profile_<プロフィール名>
※ XPだとDocument and Settings配下だったと思われ。

ipython_qtconsole_config.py を開いて以下の修正を行う。

213行目
# c.IPythonWidget.font_size = 0
↓コメントアウトを外して任意のサイズ値を指定
c.IPythonWidget.font_size = 12

273行目
# c.IPythonWidget.font_family = u''
↓コメントアウトを外して任意のフォント名を指定
c.IPythonWidget.font_family = u'MS Gothic'
(3) オプション引数指定

ipython-qtconsole.exe にオプション引数"--profile=<プロフィール名>"を指定して起動する。

4.まとめ

Windowsでの対話シェルはIPythonのQtConsoleが最もリッチでよさそう。
でも私の環境だと、import行でTab補完するとIPythonのカーネルから応答がなくなるけど。何でですかね。誰か助けて。