IPython notebook (Jupyter) と IPython qtconsole を同じIPythonのカーネルで動かす
2015-05-23追記:
IPython Notebook version 3 (Jupyter)からは、どうやらカスタムjavascriptが変わったようですので、%username%\.ipython\profile_default\static\custom
にある、custom.js
の末尾に挿入するコードは次のようになります:
require([ 'base/js/namespace', 'base/js/events' ], function(IPython, events) { events.on('app_initialized.NotebookApp', function(){ IPython.toolbar.add_buttons_group([ { 'label' : 'run qtconsole', 'icon' : 'fa-terminal fa', // select your icon from http://fortawesome.github.io/Font-Awesome/icons 'callback': function () { IPython.notebook.kernel.execute('qtconsole') } } // add more button here if needed. ]); }); events.on('app_initialized.NotebookApp', function() { IPython.CodeCell.options_default.cm_config.autoCloseBrackets = false; }); });
+追記終わり+
2015/03/11追記:
ipython notebookが立ち上がった時に読むjavascriptを編集することで、簡単にqtconsoleを同じカーネルで動かすことが出来ます。
具体的には、
%username%\.ipython\profile_default\static\custom
にある、custom.js
というファイルの末尾に次を挿入:
$([IPython.events]).on('app_initialized.NotebookApp', function(){ IPython.toolbar.add_buttons_group([ { 'label' : 'run qtconsole', 'icon' : 'icon-terminal', // select your icon from http://fortawesome.github.io/Font-Awesome/icons 'callback': function () { IPython.notebook.kernel.execute('%qtconsole') } } // add more button here if needed. ]); });
これだけです。
ただし、%username%\.ipython\profile_default\static\custom
の場所は異なる場合があります。デフォルトでなにもいじっていないなら問題無いと思います。
上記の設定をしたあとにいつも通りipython notebookを起動すれば、画面上部のツールバーに「>_」というアイコンが増えているはずです。 そのボタンを押せば、同じカーネルでqtconsoleが立ち上がり、notebookを汚さずに変数の中身やヘルプのチェックがおこなえます。
ちなみに、設定をいっさいしなくても、notebookに%qtconsole
と打ち込んで実行すれば同じカーネルでqtconsoleが立ち上がります。
+追記終わり+
IPython notebook はとても便利なアプリで,ブラウザ上でインタラクティブにPythonのシェルを叩けます.
しかし,基本的にはコードのブロックを次々と入力していき,しかも出力や入力のログが残り続けます.
「この変数はなんだっけ?」と思ってprint(x)
などとだけ書いたコードを評価すると,そのprint(x)
とその出力のログは残り続けるのです(というか,入力と出力のログを残すことがnotebookの役割なので正しいわけですが).
しかし,やっぱり変数の中身だけちょっと見てみたいとか,「これで決定!」なわけではないコードを試してみたいとか,とにかく「ログに残ってほしくない」ようなとき,shellで動くIPythonの便利さが欲しくなります. だからといって新たにshellでIPythonを起動しても,notebook上の変数を調べるためにはnotebookの入力を全部取ってきてshellにコピペしなければなりません.
そこで,同じカーネルでnotebookとqtconsole*1を動かすことを考えます. notebookもqtconsoleも,実はそれ自体はpythonのコードを実行してはいません.裏で動いている「カーネル」と呼ばれるpythonのプロセスに入力を渡して実行してもらい,その出力を受け取って表示しているだけです.よって,その「カーネル」を共有してnotebookとqtconsoleで使えば良いわけです.
まずはipython notebookを起動しましょう.ファイル名を指定して実行,またはshell(terminal, cmd.exe, powershellなど)上で
ipython notebook
とします. おなじみの画面がブラウザに表示され,同時にカーネル用のウィンドウ(シェルのウィンドウ)が立ち上がると思います. なにかnotebookを開いて,カーネルを起動させます. notebookを開くと,先ほどのシェルのウィンドウに「Kernel started: ***」のように表示されます.この状態で,今までどおりnotebookは編集できます. さらに同じカーネルを使ったqtconsoleを立ち上げるには,ファイル名を指定して実行,またはshell上で
ipython qtconsole --existing
とします. --existingオプションは,ipythonを最後に起動したカーネルを使って立ち上げるという意味です. もしもすでにカーネルが複数立ち上がっていて(=複数のnotebookを編集していて),どのカーネルを使ってqtconsoleをたちあげたいか指定するときには,使いたいカーネルのウィンドウに表示されている「Kernal started:」のあとの文字列と同じものを使って
ipython qtconsole --existing kernel-文字列.json
とします. もしもカーネルの番号がわからなくなった場合,notebookで
%connect_info
を実行すれば教えてくれます."key"がそうです.
*1:shell上のipythonみたいなものです.shellよりちょっと強力な機能がついています.