Help us understand the problem. What is going on with this article?

Jupyter 環境設定補足 #pythontokai

More than 3 years have passed since last update.

前置き

先日(2015/05/30)、Python東海 第27回勉強会で、「Jupyter + RISE による ライブデモ&プレゼンテーション」という発表をしてきました。

JupyterRISE_cap.png

発表は、資料を 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
PyenvDeBeHappy.png

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

IRubySample.png

まとめ

意外と多くのことをやってるように思えてきた。
もっと小出しにして少しずつまとめていけば良かったかな。

これらが何かしらの参考になれば幸いです。


  1. @ssh0 さんの「IPython 3.0.0-dev、IPython Notebookで"LIVE"なHTMLプレゼンテーション」および「nbviewerでスライド表示もできるようになった!【Jupyter】」の各記事を参考にさせて戴きました。この場を借りてお礼申し上げます。 

  2. pip3 install -U pip したら Python3 環境が Python2 環境と棲み分けできなくなり ipython3 で Python2 環境の IPython が起動してしまうようになった、等。 

  3. ステマ。 

  4. IRuby のドキュメントに Ruby >= 2.0.0 と記述がありますが、IRuby v0.2.2 以降は Ruby2.1 以降で追加された Binding#local_variable_defined? 等を利用しているため、Ruby2.0 では動作しません(ハマった。issue 投げてない…)。 

  5. exitquit で終了しようとすると「カーネルが死んだ」と言われてエラースタックが表示された上で「再起動するか?」と聞かれてnを入力しないと抜けられないし鬱陶しい。 

  6. 本当は余裕があれば、その前日に開催された Ruby東海勉強会 で少し触れようとも思ってました(ステマその2)。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした