Jupyter

シェル芸人のためのJupyter環境を構築しよう!!!11

スクリーンショット

screenshot1.png

Jupyterとは

スクリーンショットをご覧あれ。ブラウザでPython(Bashも)を実行出来る環境です。

  • Markdown形式のメモと一緒にWeb上で実行&保存できちゃうステキ機能
  • 書いた物は保存できて、いつでも再実行可。
  • スライドやhtmlにも変換できます。
  • GitHub Gistにエクスポートすれば、公開もできちゃう。

まさにPythonista(シェル芸人)のための環境ですねw

噂の買い切りVPSCloudAtCostに導入してみてもいいかもしれない。

Jupyter環境の構築

ググると幾つか出てきますが、minicondaを使用したインストール方法を以下にまとめます。

minicondaを利用する利点としては、こんな感じです。

  • 一般ユーザの環境に導入できる(システムに深く食い込まないので、アンインストールが簡単)
  • 既存のPython環境と別々に作ることができ、かつ、お互いに干渉しない環境が簡単に作れる
  • 容量がanacondaより小さく、必要最小限。

minicondaは、主にPythonの数値処理系のライブラリを加えたanacondaというものの最小のセットになります。

想定する環境

以下を想定しています

  • CentOS または RedHatLinux

実際にセットアップした環境は以下です。

CentOS Linux release 7.2.1511 (Core) 

minicondaのインストール

以下からセットアップ用のファイルをダウンロードします。
python3用のセットアップファイルをダウンロードしてください。

miniconda
http://conda.pydata.org/miniconda.html

$ wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

余談ですけど、このシェルスクリプト、バイナリファイルと悪魔合体する黒魔術を使っているので、catしてみたりすると大変な事になりますw

実行。
途中、対話形式で入力を求められますが、以下のよう入力してください。

$ bash Miniconda3-latest-Linux-x86_64.sh
[Enter]
yes
[Enter] # or 任意のインストール先を入力
no      # システムに標準で入っているPython環境と使い分けをしたいため。.bashrcに追加されてもいい人は yes にしておく。

インストール時にnoを選択して .bashrc に追加しなかったので、以下の通り、任意に環境変数をセットするシェルスクリプトを作成しておきます。
これによって、こんな環境の切り替えができます。

  • 通常は、システムに入っているPythonが使われる。
  • このシェルスクリプトを実行して環境変数を取り込んだときだけ、miniconda環境が使われる。

環境変数(PATH)設定用のシェルスクリプトを作る。

$ vi setenv.sh
#!/bin/bash

PATH=[minicondaのインストールディレクトリ]/miniconda3/bin:$PATH
export PATH

ドット実行する。
環境変数PATHの先頭に[minicondaのインストールディレクトリ]/bin が含まれていることを確認する。

$ . setenv.sh
$ env |grep PATH
PATH=[minicondaのインストールディレクトリ]/miniconda3/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

Jupyterのインストール(minicondaインストール先にインストールされる)

$ conda install jupyter

Jupyter設定ファイルの生成。

$ jupyter notebook --generate-config

パスワードの作成(結果をメモしておく)

以下はパスワードを hoge にしているけど、適宜変更してね。

$ python
Python 3.5.1 |Continuum Analytics, Inc.| (default, Dec  7 2015, 11:16:01) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from notebook.auth import passwd
>>> passwd()
Enter password: hoge
Verify password: hoge
'sha1:86a104de86a2:d3f296d042d0be7c38df963b01670e51dd2ab081'
>>> quit()

Jupyter設定ファイルの編集

  1. ローカルホストからしか接続を認めない→どこからでもOKに修正
  2. Jupyterで書いたファイルの保存先を指定
  3. 認証パスワードを設定(上記Pythonのpasswd()の事項結果をコピペ)
  4. 接続先ポート番号を指定(デフォルトは8888)
$ cd ~/.jupyter
$ vi jupyter_notebook_config.py

- # c.NotebookApp.ip = 'localhost'
+ c.NotebookApp.ip = '*'

- # c.NotebookApp.notebook_dir = u''
+ c.NotebookApp.notebook_dir = u'ファイルを保存する任意のディレクトリ'

- # c.NotebookApp.password = u''
+ c.NotebookApp.password = u'sha1:86a104de86a2:d3f296d042d0be7c38df963b01670e51dd2ab081'

- # c.NotebookApp.port = 8888
+ c.NotebookApp.port = 8883

httpsて通信するための設定

  • Let's Encrypt サーバー証明書を取得しましょう。
  • 詳細は、ServersManの Let's Encrypt サーバー証明書の取得と自動更新設定 を参照のこと。
  • 証明書が準備できたら、Jupyter設定ファイルの編集します。
  1. サーバ証明書の所在を設定
  2. 秘密鍵の所在を設定
$ cd ~/.jupyter
$ vi jupyter_notebook_config.py

- # c.NotebookApp.certfile = u''
+ c.NotebookApp.certfile = u'/etc/letsencrypt/live/<ドメイン名>/cert.pem'

- # c.NotebookApp.keyfile = u''
+ c.NotebookApp.keyfile = u'/etc/letsencrypt/live/<ドメイン名>/privkey.pem'

Jupyterに Bash のJupyterカーネルを導入する

Jupyterカーネルと呼ばれる以下を追加インストールすることで、
Bash版Jupyterになるのでありえん良さみが深い(Python3環境が前提、Python2だどダメ)。

A bash kernel for IPython
https://github.com/takluyver/bash_kernel

$ . setenv.sh
$ pip install bash_kernel
$ python -m bash_kernel.install

実は、他のいろんな言語も用意されているので、大半の言語はJupyter上で動かす事ができる。

参考:IPython kernels for other languages

Jupyterの起動

起動

$ jupyter-notebook

後はブラウザで、https://example.com:8883 にアクセスするべし。

minicondaでPython2環境も作って共存させる場合

同じ方法でpython2環境も起動できる。
ただし、python3とpython2のJupyter環境を同時に起動するには、
Jupyter設定ファイルのポート番号を別々にする必要がある

$ vi jupyter_notebook_config_for_python2.py

- # c.NotebookApp.port = 8888
+ c.NotebookApp.port = 8882 # python3の設定値とは別にする

起動は、作った設定ファイルを直接指定して起動できる。

$ jupyter-notebook --config=設定ファイルのパス

使い方

使い方はググると沢山出てくるので、そちらに譲ります。
(当ページ下部のMemoの所にもリンクを入れておきました)

シェル芸人のためのJupyterの使い方を説明します。

シェル芸人のためのJupyter使い方

まず、デフォルトのPythonカーネルでもシェル芸はできます。
行頭に%%bashと入力すればシェルを実行できます。

%%bash
date;echo hoge;date

screenshot2.png

ただ、カーネルを Bash に切り替えることで、この%%bashが不要になります。
あとは……わかるね?

date;echo hoge;date

screenshot3.png

Memo

Jupyter関連で役立ちそうなリンクのメモ。

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法 - MyEnigma
http://myenigma.hatenablog.com/entry/2016/02/20/183423

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法 - MyEnigma

Jupyter (iPython) Notebookを使ってプレゼンテーション資料を作る方法 - MyEnigma
http://myenigma.hatenablog.com/entry/2016/05/22/160209

Jupyter (iPython) Notebookを使ってプレゼンテーション資料を作る方法 - MyEnigma


Qiita

Jupyter事始め - Qiita
http://qiita.com/taka4sato/items/2c3397ff34c440044978

extensionを追加してもっと快適なJupyter環境を構築する - Qiita
http://qiita.com/sasaki77/items/30a19d2be7d94116b237

Condaで作ってる仮想環境の切り替えをJupyter上で簡単に行う方法 - Qiita
http://qiita.com/yoppe/items/38005f415a5b8b884c7d

Jupyter Notebookでブログ書きたい - Qiita
http://qiita.com/patraqushe/items/49a990cbdfb51afed620

Jupyter notebook で HTML も自動作成 - Qiita
http://qiita.com/junkoda/items/011d44dcc1c8bd0a936a

Jupyterでコンテナーを入れ子の枠で表現(図式化)、とそれを作る過程で調べたこと - Qiita
http://qiita.com/argius/items/17710321c8225bfb7417

Jupyterで好きなHTMLを埋め込む - Qiita
http://qiita.com/xeno1991/items/65b7da476d6f89d06388

Qiitaの記事とJupyter notebokとの相互変換 - Qiita
http://qiita.com/Tsutomu-KKE@github/items/168400d2e3ea44a70022

iPython でスライド作り - Qiita
http://qiita.com/sosuke/items/e42b5b81878e361249b6

junpyter notebookをCUIで実行&保存 - Qiita
http://qiita.com/nzw0301/items/83814189bd93224b7c51

nbviewerでスライド表示もできるようになった!【Jupyter】 - Qiita
http://qiita.com/ssh0/items/de6cc6aacd004a2e57dd

データサイエンティストに向けたコーディング環境Jupyter Notebookの勧め - Qiita
http://qiita.com/y__sama/items/17aedf0c05187edd61c3


nbviewer - A simple way to share Jupyter Notebooks
http://nbviewer.jupyter.org/

once upon a time, - JupyterからSpark clusterを操作できるlivy + sparkmagicを試してみた
http://chezou.hatenablog.com/entry/2016/07/12/115000

Jupyter Notebook の Tips をまとめてみた
https://adtech.cyberagent.io/techblog/archives/2317

screenshot1.png - Jupyterのスクリーンショット (39.361 KB) kanata, 2016/07/03 14:51

screenshot3.png - Bashカーネル (34.893 KB) kanata, 2016/07/03 15:10

screenshot2.png - デフォルトのPython3カーネル (38.966 KB) kanata, 2016/07/03 15:10

クリップボードから画像を追加 (サイズの上限: 100 MB)