前置き
某 オンライン機械学習コース を受講するにあたって、自宅及び会社の Mac に Octave をインストールました。
で、Jupyter に確か Octave のカーネルもあるはずだ、と探してついでにインストールしたのですが。
ちょっとだけハマったので、情報共有のために記録。
【2015/07/14 09:00 追記】
動作確認していて、日本語の扱いでハマったので、記事を加筆・修正しました。
環境
Octave のインストール
Octave は、バイナリをダウンロードしてインストールすることもできるようですが、私は Homebrew でインストール。OSX のバージョンにほぼ依存せず同じ手順でインストールできたので(時間はかかりますが)。
$ brew update
$ brew tap homebrew/science
$ brew install octave
あと私の環境には Java は既に入っていたので起動も問題なく。
$ octave --version
GNU Octave, version 3.8.2
Copyright (C) 2014 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.
Octave was configured for "x86_64-apple-darwin13.4.0".
Additional information about Octave is available at http://www.octave.org.
Please contribute if you find this software useful.
For more information, visit http://www.octave.org/get-involved.html
Read http://www.octave.org/bugs.html to learn how to submit bug reports.
$
octave_kernel のインストール
1. パッケージのインストール
Jupyter の Octave カーネルは、Python パッケージとして用意されている(Package Index > octave_kernel)ので、pip
コマンドでインストールできます。
注意点として、日本語の扱いに問題が出ないように、Python3 の方にインストールします。(詳細後述)
$ pyenv shell 3.4.3
$ pip install pip --upgrade
$ pip install octave_kernel
依存関係も含めて複数のパッケージがインストールされます。
ちなみに pip install octave_kernel --upgrade
とすると、依存パッケージが更新可能なときについでにアップグレードされる模様です3。
インストール確認4:
ls ~/.pyenv/versions/3.4.3/lib/python3.4/site-packages/ | grep octave_kernel
octave_kernel-0.11.0-py3.4.egg
2. カーネルの設定
この手順は、本来不要です。インストールが成功すれば、カーネルの設定まで行われるはずなので5。
先に次節の 3. 動作確認 を試してみて「カーネルが見つからない」という旨のエラーが出たら、以下のカーネル手動設定を実施してください。
カーネルの手動設定と言っても、やることは kernel.json ファイルを自分で作って適切な場所に配置すればOK。
$ cd ~/.ipython/kernels
$ mkdir -p octave_kernel && cd octave_kernel
$ vi kernel.json
kernel.json(サンプル):
{
"argv": [
"/path/to/user_home/.pyenv/versions/3.4.3/bin/python",
"-m", "octave_kernel",
"-f", "{connection_file}"
],
"display_name": "Octave",
"language": "octave",
"name": "octave_kernel"
}
3. 動作確認
「カーネルが見つからない」といった旨のエラーが出たら、前節 2. カーネルの設定 に戻ってカーネルを手動(再)設定してください。
$ ipython console --kernel=octave_kernel
IPython Console 3.2.0
In [1]: printf("Hello, World!\n")
gnuplot 5.0 patchlevel 0
Out[1]:
Hello, World!
In [2]: # 終了は Ctrl+D
Do you really want to exit ([y]/n)?
ただ printf
しようとしただけなのに gnuplot が動くのってどうなの?て感じですけれど(^-^;
Jupyter で確認
ちゃんとカーネルが追加されています:
さっそく簡単に表示確認:
因みにグラフは、SVG で描画されています。しかも セルの幅に合わせて自動サイズ調整。ブラウザの幅を変更するとリアルタイムでぐりぐりリサイズします。なんか楽しいw
【追記:2015/07/14】注意点
Python2.7.x でも octave_kernel のインストールには成功しますが、日本語(というか Unicode文字列)の扱いがきちんとしていなくて、表示時に内部エラーが起きてしまう問題がありました。
少し調べたのですが、octave_kernel.py もしくは、その元になっている(OctaveKernel
の super class である MetaKernel
を定義している)MetaKernel 側の問題のようで6、深追いするのをやめました。
その代わり、String が Unicode string と統合されている Python3 なら問題ないのでは?と試したら期待通り問題なく動作した、というわけです。
環境共存しておいて良かった(^-^)
ということで、OctaveKernel(およびその他 MetaKernel を利用したカーネル)の利用には、Python3 を使いましょう。
なお私は、結果的に 2.7.x で一度 octave_kernel をインストールして後から 3.x でもう一度インストールした形になりましたが、(/usr/local/share/jupyter/kernels 以下にカーネルが正常に設定される環境なら)カーネル設定は普通に上書きされました。問題なし。
手動設定した場合はパスを適宜修正する必要があります。
参考
- OctaveをMac OS X Yosemiteへインストール (by @ykoga)
- How to install Octave via Homebrew in Mac OS X 10.10 Yosemite
-
メインの Python を 2.7.9 とし、3.4.3 を pyenv で共存インストールしてカーネル追加して両方動くようにしています。詳細は先日の記事(Jupyter 環境設定補足 #pythontokai)参照のこと。 ↩
-
IPython もバージョンアップしていたのでついでにアップデート。というか…↓参照 ↩
-
実はこれで IPython が 3.1.0 から 3.2.0 に上がって「うぉっ」となりました(^-^; ↩
-
Python2.7 にインストールしたときは、
imp.find_module('octave_kernel')
で確認できたのですが、Python3.4 ではこれで確認できなくなった(見つからないて言われた、謎)ので、ファイルが存在するかどうかだけ確認しています。 ↩ -
カーネルの設定が自動で行われた場合、~/.ipython/kernels 内ではなく、 /usr/local/share/jupyter/kernels/ 内に設定ファイルが生成されるようです。以前にインストールした bash_kernel の設定はそこに存在しています。 ↩
-
ひょっとしたらソース先頭にマジックコメント(
# coding: utf-8
)を入れてもらうだけで解決する問題かも…。 ↩