Edited at

IPython notebook サーバーを立ち上げる

More than 5 years have passed since last update.

IPython notebook を利用すると Web アプリケーションとして動作しブラウザのみで IPython の対話環境を使うことができるようになります。

サーバーサイドで IPython を起動しておけば良いだけなので、いくつかのメリットがあります。


  • クライアントとなる計算機にブラウザ以外の特別なソフトウェアをインストールする必要がない

  • (特に matplotlib で) 描画した図や表がインラインで表示される

  • セッションを保存し、たとえばプレゼンテーションなどに利用することができる

このあたりは以前に書いた IPython Notebook の使いどころの通りです。

IPython notebook では以下の画像のようにプロットした画像がすぐに表示されます。このため探索的にデータを分析していくような作業に向いています。

3.png


IPython notebook のサーバーを用意する

あらかじめサーバーサイドにデータ分析用のプログラミング言語環境を用意するのが済んでいることを想定します。


サーバー用のプロファイルを生成する

まずは次のコマンドを発行します。これによりホームディレクトリの .ipython ディレクトリに default とは別に nbserver というプロファイルが生成されます。

ipython profile create nbserver

こちらをサーバー用のプロファイルとしてカスタマイズしていきます。プロファイルは ~/.ipython/profile_[プロファイル名]/ ディレクトリの下に生成されます。ここの環境設定ファイルを編集することになります。

まず ipython_notebook_config.py に以下の設定を記述しておくと良いでしょう。

c.IPKernelApp.pylab = 'inline'

c.NotebookApp.ip = '*' # ローカルホスト以外からもアクセス可能にする
c.NotebookApp.open_browser = False # ブラウザが自動で開かないようにする
c.NotebookApp.port = 9999 # サーバーのポートを指定する


IPython notebook サーバーを起動する

次のように IPython notebook サーバーを起動します。

ipython notebook --pylab inline --profile=nbserver &

サーバーの環境設定ファイルで指定したアドレスとポート番号にブラウザでアクセスすると IPython notebook の画面が開きます。

2.png


初期化スクリプトを設定する

IPython の豊富な機能を使いこなす話で IPython のデフォルトの初期化スクリプトを作成しました。プロファイルが異なるので ~/.ipython/profile_nbserver/startup/ に初期化スクリプトを置きます。とはいえ基本的には同じ初期化スクリプトで良いでしょう。単純にコピーして適宜必要な設定を追記します。


パスワードを設定してアクセス制限をする

このままですとどこからでも IPython notebook を利用できますが、アクセス制限をしたい場合も多いかと思います。そこでひとまずパスワードを設定しておきましょう。

IPython notebook の新規ノートから次のようにコードを叩きます。

from IPython.lib import passwd

passwd()

するとサーバーサイドのターミナル上にパスワードプロンプトが表示されますのでここで希望する新しいパスワードを入力します。結果はブラウザ上に sha1 暗号化されて表示されます。

あとは上の暗号化されたパスワードハッシュを環境設定ファイルに記載すればオッケーです。

c.NotebookApp.password = u'sha1:yourhashedpassword'

このあと IPython notebook を再起動すると次のようにパスワード入力画面が表示されます。

1.png


まとめ

IPython notebook を使えばどこからでもブラウザで IPython が利用できるようになります。とはいえマジックコマンドを利用すれば OS にコマンドを発行出来てしまいますし、上記のパスワードによる保護も強固なものとは言えませんので、インターネットで不用意にサーバーを公開するのは危険が伴うことも忘れないようにしましょう。