EIN -- Emacs IPython Notebook は Emacs 上の Jupyter Notebook クライアントです。Takafumi Arakaki さんが開発し,John Miller さんがメンテナンスされています。
インストールは melpa でできます。具体的には,~/.emacs.d/init.el に
(require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (package-initialize)
と書いて Emacs を再起動し(あるいは上の3行を評価し),M-x package-list-packages して表示されるパッケージ一覧の ein の上にカーソルを動かして i キーを打ち(I
マークが付く),x キーを打つと実際にインストールされます。ein 以外にも,例えば R を使うなら ESS を同じ方法でインストールしておくと便利です。ときどき M-x package-menu-mark-upgrades すると更新が楽です。
あらかじめ ~/.mailcap というファイルを作成し,Mac なら image/*; open -a Preview "%s"
のように書き込んで画像ビューアとして「プレビュー」を設定します。ついでに「プレビュー」の環境設定でウィンドウの背景を白に設定します。
起動は M-x ein:run して,[New Notebook] の上で RET します(Enter キーを押します)。デフォルトでは Untitled.ipynb というノートブックが作成されますが,C-x C-w でリネームできます。ときどき C-x C-s で保存します。別の方法として,既存の .ipynb ファイルを開いて C-c C-o します。終了は M-x ein:stop です。
セル(In [ ]:
の下)に何行かのコードを入力して M-RET すると,実行され,次のセルに移動または新しいセルが挿入されます。C-c C-a で上にセルを挿入,C-c C-b で下にセルを挿入します。C-u C-c C-a で上にマークダウンを挿入,C-u C-c C-b で下にマークダウンを挿入します。C-c C-k でセルを消します。C-c ↑ や C-c ↓ でセルを上や下に移動します。
長い出力があると見通しが悪くなるので,出力の上で C-c C-e して出力を隠すことができます。もう一度 C-c C-e すると現れます。
セルの実行中に止めたくなったときは C-c C-z します。このときのカーソルの位置はどこでもかまいません。
画像はデフォルトでは外部ビューアで表示しますが,インライン表示するには M-x customize-group RET ein と打ち,▷ Ein Output Area Inlined Images の先頭で RET し,Toggle を押してその右を on にし,ページ先頭の Apply and Save を押します。こうすることによって ~/.emacs.d/init.el の (custom-set-variables ...)
の中に '(ein:output-area-inlined-images t)
が挿入されますが,手で挿入すると間違えやすいので上のような手順が推奨です。
別の起動のしかたとして,ターミナルで作業ディレクトリに移動して,好きな Python の環境で例えば
jupyter notebook --no-browser --no-mathjax --port=8888 &
と打ち込んで Jupyter サーバを起動してから,Emacs 側で M-x ein:login します。ポート番号は 8888 がデフォルトです。EIN を開くときに URL かポートを聞いてきますので,上で指定したポート番号を入れます。Emacs 側で EIN を終了したら,ターミナルで
jupyter notebook stop
しておきます。
Jupyter サーバは自マシンでなくてもかまいません。他のマシンにログインして
jupyter notebook --ip='*' --no-browser --no-mathjax &
のようにして http://ホスト名:8888/?token=... でアクセスすることもできます。デフォルトは http なので注意。さらに,他人にアクセスしてもらうときは,Jupyter サーバを起動した人の権限で何でもできてしまいますので,十分注意する必要があります。
あるいは
ssh -L 8888:hostname:8888 hostname
で他マシンにログインして
jupyter notebook --no-browser --no-mathjax &
してから M-x ein:login で 8888 と打つという手もあります。ssh トンネルを通るので暗号化されます。ポートを変えれば複数のサーバを同時に使うこともできます。EIN がパスワードを聞いてくるときは,Jupyter サーバを立ち上げたときに表示されるトークン文字列を入力します。
ヘルプの別窓表示が壊れているようです。とりあえず ?hoge
でなく help(hoge)
を使えば大丈夫のようです。
Markdown 中の数式は ein-preview-latex で画像化して表示できるようです(未確認)。