読者です 読者をやめる 読者になる 読者になる

Jupyter notebook (IPython notebook 4.x) で Notebook Extensions を使う(Anaconda利用)

python software mac programming

まえがき

Jupyter notebook で、各セル内のコードがだらーっと縦長になってしまった。 include のやりかたがよくわからんので(できるのかも含め)、とりあえず folding でごまかせないかな?と思ってググったところ、 Notebook Extensions というのを導入すればできそうだった。本当はセルごと hide (fold) して欲しいんだけど、これはそうではなく code 内の一部ということのようだ。まぁとりあえず試そうかなと。

前提(環境)

  • Jupyter notebook
  • Anaconda 3

を利用。Mac OS X Mavericks だけど別に Win でも関係ないかも。わからん。

手順

github のページの wiki にあるとおりやるだけ*1

リポジトリのクローン

まず適当なディレクトリ(でいいと思うが…)にて、github のリポジトリをクローン。具体的には、HTTPSの右の方にあるボタンを押してURLをクリップボードにコピーして、SourceTree を立ち上げて、+New Repository > Clone from URL で Source URL のとこに貼り付ける。そしたらなんかガーッとDLされるので、BRANCHES で master 選んだ状態で、メイン画面のツールバー右上にある Show in Finder を押すと実際にどこに保存されたかわかる。

インストール

次にターミナルを立ち上げてそこのひとつ上のディレクトリに移動し($ ls したときに IPython-notebook-extensions ていうディレクトリが見える状態で)、さっきのページにあるとおり

$ conda build IPython-notebook-extensions

する。終わったら、これも書いてあるとおりに下から四行目の .tar.bz2 を使う。(ここ訂正。Mac OS なのでこんな感じのはず)

$ conda install ~/anaconda/conda-bld/osx-64/nbextensions-master-py34_0.tar.bz2

設定

まずいつものように $ jupyter notebook で起動する。それから別のタブを開いて
http://localhost:8888/nbextensions へ行くと設定画面が起動するはず。あとはうまいことやってください。

その他

ショートカットで fold/unfold が作動しない…

…で、僕の場合 Codefolding というやつを Activate したら確かに folding 自体はでてきて、クリックでの開閉はできるようになった。だけど、デフォルトで設定されてるショートカットの option+F で fold/unfold されない。適当なものに変えてみてもダメ。ちょっとこれは困るな…。ブラウザのキャッシュをクリアしろとかあるしやってみるか。

マニュアルインストール?

config extension · ipython-contrib/IPython-notebook-extensions Wiki · GitHub ←このページも結局 githubwiki の一部なんだけど、下の方にゴチャゴチャと「設定ファイルがあるディレクトリを確認して…」とか書いてあるが、その前に

You only need the instructions below to perform a manual installation.

とあるとおりで、自分の場合は一切やる必要なかった。場合によっては必要なのだろうけれど。

他の extension

Keyboard shortcut editor がある!どうやらこれを activate するとヘルプのショートカット一覧 (h で起動) から編集できるようになるようだ。が…実際に active するとなぜかショートカット一覧が開かなくなった…なんでだ…。キャッシュなどクリアしても駄目。普段使いの chrome だけでなく、デフォルトから設定を全くいじってない safari でもだめだった。

UPDATE 2016-06-12

久々に extension 使ってみたのでメモ。

まず何はともあれ NbExtensions menu item を enable するのをオススメ。これで今度からはアドレスバーにコマンド打ち込まなくても、notebook 画面で Edit メニューの一番下にコンフィグ画面を開くためのリンクが追加される。

それから上でうまく作動しないと書いていた keyboard shortcut editor が問題なく作動していた。今回はショートカットで「セルを上に移動」「セルを下に移動」がしたかった。実は extension のエントリに Move selected cells というのがあるのだが、自分の環境 (Chrome on Mac OS X Mavericks) ではこれを enable してもうまく動かなかった。そもそも複数セルを一度選択してから移動、というのが意図された動作のようだが、もっと単純に単にセルを移動したかった。で、これは結局新しくショートカットを追加してアッサリできた。手順は以下:

  1. extension で keyboard shortcut editor を enable する
  2. 適当な notebook を開く。おそらくこの時に自動的にショートカットの一覧が開くはず(開かなかった場合は、メニューバーの Help > Keyboard Shortcuts から開く)
  3. セル移動は Command Mode での作業なので、Command Mode の一番下あたりにある「+ : Add a new command-mode shortcut」をクリック
  4. 上の行に Bind [select action] to: とあるので、[select action] の部分のドロップダウンリストをクリックして、下に行ったところにある jupyter-notebook:move-cell-down を選択する。
  5. 下の行にある というところの右をカーソルでクリックし、好みのショートカットを入力する。自分は Ctrl + J にしてみた。OK で確定。
  6. 同じことを jupyter-notebook:move-cell-up についても行う(Ctrl + K にしてみた)。

以上。

なお、ググってるときに知ったけど、どうやら昔はこの Ctrl + K, Ctrl + J がセル移動に割り当てられていたらしいが、特定のブラウザ自体のショートカットとコンフリクトするというのであるときに無効化されたらしい。そこでの議論では「は?使いたかったら custom.js をいじれや」みたいになってたけど、こうして extension を使って javascript わからない素人でも設定できるのはありがたいことです…

*1:Anaconda 使わない場合も、このページの周辺や同じ wiki 内にある情報でなんとかなるはず($python setup.py install とかするっぽい?)。