ipython notebookとは
ざっくり言うとiPythonをweb browser上で動かせるやつ。(参考: ipythonとは)
今はpythonだけじゃなくてRとかRubyとか他言語もいろいろ動かせるらしく、名前もipython notebookから、Jupyterになった。JupiterじゃなくてJu”py”terなのがキモ。
入力した式をinlineでグラフ表示したり、その状態を保存しておくことができる機能が使いたかったので、環境をつくってみた。 いろいろ必要なライブラリがあって、どんどんローカル環境に入れていくと、あとからつらくなりそうだなと思ってvagrantでつくってpackageにまとめたメモ。
下に貼った画像みたいに、グラフを見つつブラウザで試しながら、修正してすぐ反映できるツールである。ファイルは拡張子 .ipynb で保存できて、一ヶ月くらい前からgithubでもサポートされるようになってていい感じ。(参考 : Rendering Notebooks on GitHub )
ベースになる vagrantのserverを用意する
vagrant box es から、今回はOfficial Ubuntu 14.04 daily Cloud Image amd64 を使う。まあなんでもいいとおもう。
$ vagrant box add ubuntu-14 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
$ vagrant init ubuntu-14
$ vagrant up
$ vagrant ssh
$ sudo apt-get update # @vagrant
$ sudo apt-get upgrade # @vagrant
ipython notebook (jupyter)のインストール
pipでipythonをまずインストール
$ pip install ipython # @vagrant
次に計算とか描画のためのライブラリを、”Anaconda”ごと入れる。
公式からAnaconda の インストーラーを落としてきて実行する。(Anacondaで入るもの)
$ bash ./Anaconda-2.2.0-Linux-x86_64.sh
$ conda update conda
$ conda update ipython ipython-notebook ipython-qtconsole matplotlib
ipythonの起動
$ ipython notebook --no-browser
オプションno browserをつけないと、w3mが立ち上がるので。
localのブラウザから確認
Vagrantfileの”forwarded_port”で設定すれば、デフォルトのport 8888で、http://localhost:8888/ からipython notebook が使えるはずだったが、うまくいかない。
一度vagrant のサーバーから出て、以下のコマンドで入りなおしてipythonを起動して確認できた。
$ vagrant ssh -- -L 8888:localhost:8888
(参考: vagrantで作ったVMでipython notebookを立ち上げてローカルからアクセスする )
環境をvagrant box にまとめる
vagrantのサーバーから出て、packageコマンドでpackageにしたところ、容量が1.4GBになったので、削りたい。 やったことは以下。
$ sudo umount /vagrant # 共有フォルダを unmount
$ sudo apt-get autoclean # apt の cacheクリア
$ dd if=/dev/zero of=zero bs=1M # zeroで埋める
$ rm -f zero
$ rm ~/.bash_history # 履歴削除
( 参考: Vagrant用のboxファイルを小さくする )
改めてpackage したところ、990Mで2/3ぐらいになってよかった。
$ vagrant package
はまったところ
ブラウザから確認できない
- 前述の通り、
vagrant ssh -- -L 8888:localhost:8888
でvagrantに入って、ipython notebookを起動
matplotlibを使ってグラフを描くと、libpng15が無いエラーが出る
- エラー内容
ImportError: libpng15.so.15: cannot open shared object file: No such file or directory
matplotlibをanacondaからupdateして、問題を解消した。
$ conda update matplotlib