前置き
先日(2015/05/30)、Python東海 第27回勉強会で、「Jupyter + RISE による ライブデモ&プレゼンテーション」という発表をしてきました。
発表は、資料を Jupyter(IPython Notebook)で大枠を作り、RISE でリアルタイムスライド表示しながらその場で編集し、その場で Gist にアップ → nbviewer に登録 → nbviewer でのスライド表示、という流れで実施1。上記の発表資料は最終的に nbviewer で公開したスライド(後で少しだけ再編集したもの)です。
で、スライド関係は良かったのですが、主にそれ以外の環境設定周りについて、短い発表時間の中でだいぶ端折ったり、発表資料も最低限のことしか書いていないので、自分がやったことを補足しておこうと思います。
なおこの記事は、先日の記事「IPython + IJulia → Jupyter アップデート覚書」の 補足+後日談 的な位置づけでもあります。
お品書き
Python の共存インストール
元々 Python は Homebrew でインストールして使用していたのですが、Python2 と Python3 の共存で問題が発生2したので、pyenv に移行しました。
Homebrew でもインストールできたのですが、rbenv も直接 git clone
で入れていたのでそっちで。
$ cd ~
$ git clone https://github.com/yyuu/pyenv.git .pyenv
$ vi .bash_profile
;;;《中略、最後に以下の3行を追記》
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
その後、Python2/Python3 をそれぞれインストール
$ pyenv install 2.7.9
$ pyenv install 3.4.3
$ pyenv local 2.7.9
$ pyenv versions
system
* 2.7.9 (set by /path/to/user_home/.python-version)
3.4.3
参考:「pyenvで幸せになろう」
私の発表の直前に、タイミング良く pyenv の発表もあったので、その資料も紹介しておきます3。
IPython への Python カーネル追加設定
まず、前節でインストールした Python2.7.9/3.4.3 それぞれで pip install 'ipython[notebook]'
を実施。
より詳しく言うと、まずデフォルトの 2.7.9 で実施して、pyenv shell 3.4.3
で一時的に Python3.4.3 環境にして、同じものをインストールして、pyenv shell 2.7.9
で元に戻しました。
その後、デフォルトじゃない方(3.4.3)のカーネルを手動で追加。
設定内容の詳細はスライド参照。
参考にしたサイト↓を忘れていたので記しておきます。
Jupyter Help - 1.4.2 Enable Python 3 kernel
なお、Jupyter (IPython Notebook) を使う分には、起動した後で notebook ごとに kernel を選択出来るのでこれで良いのですが、ターミナル上の REPL として Python3 上の IPython を使いたいときは、毎回 pyenv shell 3.4.3
した上で ipython
と打つ必要があり、ちょっとだけ面倒です。
ので、SymbolicLink 張っちゃいました。
$ cd ~/bin
$ ln -s /path/to/user_home/.pyenv/versions/2.7.9/bin/ipython2
$ ln -s /path/to/user_home/.pyenv/versions/3.4.3/bin/ipython3
$ ~/bin/ipython3
Python 3.4.3 (default, May 13 2015, 22:15:16)
Type "copyright", "credits" or "license" for more information.
IPython 3.1.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import sys
In [2]: sys.version_info
Out[2]: sys.version_info(major=3, minor=4, micro=3, releaselevel='final', serial=0)
In [3]:
Julia の共存インストール
前の記事でも、簡単に「0.3.x はバイナリ、0.4.x はソースから」と書きましたが、今回 Jupyter に 0.3.x/0.4.x 両方のカーネルを追加したので、詳細を記します。
Julia v0.3.x
- ダウンロードサイトから環境に合った最新の Current Release (command line version) をダウンロード(私の場合、"Mac OS X Package (.dmg)")。
- 然るべき場所(/Application 内)に配置(コピーするだけ)。
- シンボリックリンク設定:
$ cd ~/bin
$ mv julia julia-0.3.z ; 古いバージョンへのシンボリックリンクを待避(削除してもOK)
$ ln -s /Applications/Julia-0.3.x.app/Contents/Resources/julia/bin/julia
$ ~/bin/julia --version
julia version 0.3.x
Julia 0.4.0-dev
初回インストール時は、homebrew-juliaの内容に従ってインストール:
$ brew update
$ brew tap staticfloat/julia
$ brew install julia --HEAD
$ which julia
/usr/local/bin/julia
$ julia --version
julia version 0.4.0-dev
アップデート時は、本家サイトや @chezou さんの記事「homebrewでjuliaのHEADのインストールに失敗した時にするといいこと」を参考に:
$ brew update
$ ; 以下の2行は単純に brew reinstall julia --HEAD したときに失敗した場合のみ。
$ brew rm arpack-julia openblas-julia
$ brew install --build-from-source arpack-julia openblas-julia
$ ; 問題が無ければ↓以下の1行だけで行ける。
$ brew reinstall julia --HEAD --with-accelerate
0.3.x/0.4.x それぞれ IJulia のインストール
Julia はマイナーバージョンレベルで環境を分けてくれるので、それぞれで Pkg.add("IJulia")
or Pkg.update()
or Pkg.build("IJulia")
するだけでOK。
それだけで、v0.3.x 用のカーネルと v0.4.x 用のカーネルがそれぞれ ~/.ipython/kernels/ 内に適切に設定されます。
また、例えばつい先日 Julia v0.3.9 が出たようなので、v0.3.8 から v0.3.9 にカーネルを変更しましたが、その手順も v0.3.9 の REPL で Pkg.update()
or Pkg.build("IJulia")
するだけ(v0.3.8 の時にインストールした IJulia がそのまま使えるので Pkg.install()
不要)。
おまけ:IRuby も入れてみた。
資料には載せてないし、発表時にはちらっとしか触れていませんが、IRubyも1週間前に更新された v0.2.x から Jupyter に正式対応したので、ついでにインストールしています。
インストールでほんの少しハマったのでその情報共有も兼ねて。
ZeroMQ(libzmq)のインストール
$ brew install zeromq --universal
Ruby v2.2.x(最新版)のインストール
rbenv でインストールしていた ruby が少し古くて、デフォルトが 2.0.0 だったので、最新にアップ4(参考:「rbenvとruby-buildでRuby環境を最新に保つ」):
$ cd ~/.rbenv
$ git pull origin master
$ cd plugins/ruby-build/
$ git pull origin master
$ rbenv install --list
: 《略》
2.2.2
: 《略》
$ brew link readline --force
$ export CFLAGS=-Wno-error=shorten-64-to-32
$ CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=`brew --prefix openssl`" RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl`" rbenv install 2.2.2
$ brew unlink readline
$ cd ~
$ rbenv local 2.2.2 ;(ユーザホームディレクトリ内のデフォルトを 2.2.2 に設定)
$ gem install 〜 ;(必要に応じて最低限の gem をインストール)
IRuby のインストール
pry を一緒に入れておくと色々便利。
$ gem install pry iruby
$ rbenv rehash
$ iruby --version
IRuby 0.2.2, Ruby 2.2.2
IRuby の設定
iruby コマンドを1回実行すれば IPython へのカーネル設定してくれる。
なお、このときついでに IPython Console が Ruby カーネルで起動する。
ので、Ctrl+D で終了する5。
$ rbenv rehash
$ iruby
IPython Console 3.1.0
In [1]: RUBY_VERSION # Rubyカーネルで IPython Console が動いている
Out[1]: "2.2.2"
In [2]: # 終了は Ctrl+D
Do you really want to exit ([y]/n)?
$
Jupyter + IRuby 動作サンプル
画面キャプチャのみ6。
まとめ
意外と多くのことをやってるように思えてきた。
もっと小出しにして少しずつまとめていけば良かったかな。
これらが何かしらの参考になれば幸いです。
-
@ssh0 さんの「IPython 3.0.0-dev、IPython Notebookで"LIVE"なHTMLプレゼンテーション」および「nbviewerでスライド表示もできるようになった!【Jupyter】」の各記事を参考にさせて戴きました。この場を借りてお礼申し上げます。 ↩
-
pip3 install -U pip
したら Python3 環境が Python2 環境と棲み分けできなくなりipython3
で Python2 環境の IPython が起動してしまうようになった、等。 ↩ -
ステマ。 ↩
-
IRuby のドキュメントに Ruby >= 2.0.0 と記述がありますが、IRuby v0.2.2 以降は Ruby2.1 以降で追加された
Binding#local_variable_defined?
等を利用しているため、Ruby2.0 では動作しません(ハマった。issue 投げてない…)。 ↩ -
exit
やquit
で終了しようとすると「カーネルが死んだ」と言われてエラースタックが表示された上で「再起動するか?」と聞かれてnを入力しないと抜けられないし鬱陶しい。 ↩