Stimulator

機械学習とか好きな技術話とかエンジニア的な話とかを書く

MacへのJupyter導入からextensionと設定メモ

- はじめに -

業務PCがWinからMacになりまして、Jupyter notebookしたいので自分の設定とextensionの導入までやったメモ。

あとChrome拡張使ってCSSを書き換えている話とか。


最初に参考資料を示しておくと、どのネット記事よりも以下extensionのGithubリポジトリのREADMEが分かりやすい。


Pythonやpip、バージョン管理環境に合わせて適宜読み替えて。

この記事書いた時点

Mac OSX Sierra 10.12
pyenv上でPython3環境構築済


 

- JupyterをVivaldiで起動するまで -

jupytera 本体の導入はpip

sudo pip install jupyter

インストールが終わったらconfigファイルを作る

jupyter notebook --generate-config
sudo vim ~/.jupyter/jupyter_notebook_config.py

Windowsだと、マシンのデフォルトブラウザで開いてくれてた気がしたけど、MacだとSafariでnotebookが開いてしまう。
Vivaldiなるブラウザを常用しているので以下設定。

c.NotebookApp.browser =u'/Applications/Vivaldi.app/Contents/MacOS/Vivaldi %s'

Chromeだと多分こう。

c.NotebookApp.browser = u'/Applications/Google/ Chrome.app/Contents/MacOS/Google\ Chrome %s'

ブラウザへのパスは適宜書き換える。

python - Launch IPython notebook with selected browser - Stack Overflow
Jupyterをブラウザ指定して新しいウィンドウで開く【なれない日記20160709】 - けつあご日記

jupyter常用者なのでbashrcにはaliasの指定をしている。

alias ju='jupyter notebook'


 

- jupyter extension -

extension導入は前述の通りREADMEを見ながら。
GitHub - ipython-contrib/jupyter_contrib_nbextensions: A collection of various notebook extensions for Jupyter

sudo pip install -e jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

上のコマンドだけとか、gitからcloneしてsetup.py動かせば導入終わりみたいなネット記事が多い理由は謎。(多分上だけだと、nbextensions見に行っても404 Not Foundだと思うんだけど…)

2つめのnbextension installでブラウザ向けのJSやCSSが入るのだけど、highlight_selected_wordが上手く導入できてないっぽくて死んだ。

NotADirectoryError: [Errno 20] Not a directory: '/usr/local/lib/python3.6/site-packages/jupyter_highlight_selected_word-0.0.11-py3.6.egg/jupyter_highlight_selected_word/static/highlight_selected_word'

highlight_selected_wordだけpipで再インストー

sudo pip uninstall jupyter_highlight_selected_word
sudo pip install jupyter_highlight_selected_word
jupyter contrib nbextension install --user

http://localhost:8888/nbextensions を見に行けばextensionのオン・オフができる。

エディタ内で色々開閉できる「Codefolding in Editor」「Codefolding」、メニューに拡張ショートカットを追加する「Nbextensions edit menu item」「Nbextensions dashboard tab」、Vimキーバインド使う用の「Select CodeMirror Keymap」、PEPの下僕として78文字超えたくないので「Ruler」を使っているのでONにしておわり。


 

- StylishでMonokai風にする -

JupyterはそもそもThemeを使う機能を備えているが、Jupyterを動かすサーバ等環境が変わったら一々設定しないといけないのと、コーディング中にも設定見直したいのでChrome拡張を使ってCSSを書き換えている。

以前までStylishを使っていたのだけど、情報送信の話があったでちょっと考えもの。
Webブラウザアドオン「Styish」、ユーザーデータの収集を始めて騒動に | スラド IT

今はCSSとJSのシンプルな拡張は全て自前。
Stylish以外で簡易なのだとStylus、Stylistあたりか。

一応StylishのユーザグループにJupyter用のCSSが公開されてたりして、これを土台に一部書き換えて使っている。

 

書き換えてMonokaiっぽくする文字周りはこんな感じ。白文字がfffなので適宜。

div.output_stderr {background-color: #050505;}
div.output_stderr pre {
color: #509050; 
font-size: 12px;}
.cm-s-ipython .CodeMirror-matchingbracket { text-decoration: underline; color: #c3c3c3 !important; }
.CodeMirror { color: #c3c3c3 !important; }
.cm-s-default .cm-link {color: #3974dd;}
.cm-s-default .cm-string {color: #de846c;}
.cm-s-default .cm-header {color: #1090f0;}
.cm-s-ipython div.CodeMirror-selected {background: #3C4555 !important;}
.cm-s-ipython .CodeMirror-gutters {background: #39414F; border: 0px; border-radius:0px;}
.cm-s-ipython .CodeMirror-linenumber {color: #5A647B !important; font-size: 11pt;}
.cm-s-ipython .CodeMirror-cursor {border-left: 2px solid #0095ff !important;}
.cm-s-ipython span.cm-comment {color: #6E7C95; font-style: normal !important;}
.cm-s-ipython span.cm-atom {color: #CAA6EC;}
.cm-s-ipython span.cm-number {color: #ae81ff;}
.cm-s-ipython span.cm-property {color: #fff;}
.cm-s-ipython span.cm-attribute {color: #E39194;}
.cm-s-ipython span.cm-keyword {color: #f92672; font-weight: normal;}
.cm-s-ipython span.cm-string {color: #e6db74; font-weight: normal;}
.cm-s-ipython span.cm-operator {color: #f92672; font-weight: normal;}
.cm-s-ipython span.cm-builtin {color: #66d9ef; font-weight: normal;}
.cm-s-ipython span.cm-boolean {color: #E39194;}
.cm-s-ipython span.cm-variable {color: #fff;}
.cm-s-ipython span.cm-variable-2 {color: #fd971f;}
.cm-s-ipython span.cm-error {background: rgba(191, 97, 106, .3) !important;}
.cm-s-ipython span.cm-tag {color: #CAA6EC;}
.cm-s-ipython span.cm-link {color: #E39194;}
.cm-s-ipython span.cm-storage {color: #CAA6EC;}
.cm-s-ipython span.cm-entity {color: #E39194;}
.cm-s-ipython span.cm-class {color: #E5DEA5;}
.cm-s-ipython span.cm-support {color: #77ABE7;}
.cm-s-ipython span.cm-qualifier {color: #77ABE7;}
.cm-s-ipython span.cm-property {color: #fff;}

あとextensionで導入したCodefoldingの三角のアレの位置とかを修正

.CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { margin-left: -4px; }

跡は幅を100% にしたりしてこんな感じ

f:id:vaaaaaanquish:20170715184749p:plain

拡張なのでCSSで指定しにくいところの書き換えはできないけどまあ概ね満足。
コードもグラフ出力も黒背景の方が僕は好きです。


 

- おわりに -

extensionは導入はpyenvやAnaconda等のベース環境によってたまに失敗してるイメージがあるんだけど、なんかもっとこう絶対優勝できるようになりたい。

あと便利なextensionあったら知りたいところです。
はてブコメントでよしなに。

Jupyter生活は快適でサイコー。