ipython notebook
新しいOSを入れると、新しい事をやろうとする切っ掛けが生まれる。
Ununtu 16.04 LTS がそれだ。今回のは5年保障という事で、随分と長い付き合いに なるはず。お仕着せのDeskTop版を避けて、サーバー版にした。ほとんど何も入って いない所から自由にいろいろな物を入れて行くって、何だか刺激的な気がする。
入れる気が無いのに入ってたのがPython3系。やっと2の長いトンネルを抜けて、3系に 移行したって事で良いのでしょうか?
python3 python3.5-config python3.5m-config python3m python3.5 python3.5m python3-config python3m-config
python3, python3m と2種類有るけど、この違いは何? 多重定義されてるけど、名前で 機能が変わるとか有るのかな? 2と3の違いは検索すると山程出て来るけど、mの違いは 全く無いね。細かい事はいいんだよ。
sakae@ub:~$ grep python- yes-we-can-supply.txt | wc -l 3340 sakae@ub:~$ grep python3- yes-we-can-supply.txt | wc -l 1485
で、リポジトリィが保持してる型録から、2と3の関連物を簡易的に調べてみた。 やはり3系は、まだまだ頑張りが足りないと言うか、普及の勢いが弱い気がする。 これで、次期のFedoraあたりが、3系をデフォにしてくれると、弾みが付くだろうね。
ipython3 notebook
例によって、資料探しから。何となく周回遅れの気がするけど、まあいいか。
Jupyter Notebook(IPython)のインストールと始め方
Jupyter から見た Treasure Data の使い方
起動は
ipython3 notebook --matplotlib inline
これで良いみたい。
上記の資料を見ると、pytoon語に応答するサーバーが立ってて、そこにfirefoxで接続に 行くって構図だ。
昔の事になるけど、webブラウザーが出た時そしてパアルでCGIを組んだ時、汎用の入出力 装置と思ったものだ。1995年頃は、ラジオボタンとか入力BOXをGUIで組もうと思ったら、 tcltkを使うか、てんでばらばらなGUIソフトを必死こいて覚える必要が有った。 これが、CGI一発で、何処でも動く入出力になるんだから、密かに喜んだものだ。
現代において、面倒な図とか音とかAV系は統一アプリのブラウザーに任せてしまえって、 誰でも考えるよね。そう言えば、以前goでグラフを書く時も結果をSVGにしてブラウザーに 渡してたね。
で、上のやつを少々試してみると、X Windowに慣れないせいか、ちと使いずらい。 何とかならないか。
server
Python notebook サーバーを立ち上げる を参考にやってみた。まずサーバーの雛形を作るとな。
sakae@ub:~$ ipython3 profile create nbserver [ProfileCreate] Generating default config file: '/home/sakae/.ipython/profile_nbserver/ipython_config.py' [ProfileCreate] Generating default config file: '/home/sakae/.ipython/profile_nbserver/ipython_notebook_config.py' [ProfileCreate] Generating default config file: '/home/sakae/.ipython/profile_nbserver/ipython_nbconvert_config.py'
そして、設定を書く。
### ipython_notebook_config.py c.IPKernelApp.pylab = 'inline' c.NotebookApp.ip = '*' # ローカルホスト以外からもアクセス可能にする c.NotebookApp.open_browser = False # ブラウザが自動で開かないようにする c.NotebookApp.port = 9999 # サーバーのポートを指定する
起動は、こんな風。面倒だからスクリプトにしておくと良い。
ipython3 notebook --pylab inline --profile=nbserver &
ちゃんと、サーバーが起動した。
sakae@ub:~/notebook$ ps a 1405 pts/1 Sl 0:02 python3 /usr/bin/ipython3 notebook --pylab inline --profile=nbserver
そして、http://ubuntu-IP-address:9999/ で、Windows7のブラウザーを起動。 この方が、X Windowを立ち上げないだけ楽だわい。
手始めにtestってノートを作って実験
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = np.arange(-10, 10, 0.1)\n",
"y = 1.0 / (1.0 + np.exp(-x))\n",
"plt.plot(x, y)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 1,
"text": [
"[<matplotlib.lines.Line2D at 0xb1234a6c>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhki
:
nGx8AAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0xb1a66a2c>"
]
}
],
こんなのが、test.ipynbってファイルに入ってた。入力をサーバーに送ったら、結果が pngファイルで返ってきましたとな。正に、実行記録が残って行くんだな。なかなか、 良く出来てる。
手抜きしてpasswordを設定しなかったら、わらわらと警告が出てきた。ここは諦めて、 ちゃんとしておこう。
sakae@ub:~$ python3 -c "import IPython;print(IPython.lib.passwd())" Enter password: Verify password: sha1:a70cef849bc7:e7ad97c1358f647af3f9ca231e33d9a4e4f1a09e
こんな風にやって、パスワードのハッシュを作成。そして、そいつを、上のconfigに 追加する。
c.NotebookApp.password = u'sha1:a70cef849bc7:e7ad97c1358f647af3f9ca231e33d9a4e4f1a09e' c.NotebookApp.notebook_dir = '/home/sakae/notebook'
ついでに、htdocsと言うかcgi-binと言うか、要するにサーバーのtopを指定してみた。 まあ、このあたりはapacheを昔、いやという程弄んだので、意味する所は明白。 これで、警告が無くなった。生意気にajaxを使っているよ。このおかげで補間が スムーズに動くのね。世の中、進歩してるね。
ああ、それから、pylabオプションは、モジュールのコンフリクトの危険性が有るからお勧めしないとな。 素直に、 --matplotlib を選んでおけと言われたよ。
notebookの使い所
って事で、
実験屋の為のIPYTHON NOTEBOOK を見ている。
そして、 現代のエンジニアのための強力なメモ帳 Jupyter notebookのすゝめ なんてのもね。
notebookは、juliaでも使えるて、RもOKらしい。irbだかpryは、もう過去形になるのかな。 python3-pandasとかもウブで供給してるから、大変便利になりそう。
jupyter
IPython + IJulia → Jupyter アップデート覚書 と Jupyter notebookをリモートサーバで実行する を参考に、現在juliaが入っているFedora23に環境を作ってみたい。
[sakae@fedora ~]$ sudo pip install ipython[notebook] [sakae@fedora ~]$ sudo pip install jupyter
をやるらしい。前提条件として、python-develを取りあえず入れておいた。何しろ python2系って事で、ほったらかしにしてましたから。
多分、エラーが出るだろうと思ったらやっぱり出たぞ。
creating build/temp.linux-i686-2.7/bundled/libsodium/src/libsodium/crypto_aead/chacha20poly1305/sodium
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Werror=format-security
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DNATIVE_LITTLE_ENDIAN=1 -Ibundled/libsodium/src/libsodium/include -Ibundled/libsodium/src/libsodium/include/sodium -I/usr/include/python2.7 -c buildutils/initlibsodium.c -o build/temp.linux-i686-2.7/buildutils/initlibsodium.o
gcc: エラー: /usr/lib/rpm/redhat/redhat-hardened-cc1: そのようなファイルやディレクトリはありません
error: command 'gcc' failed with exit status 1
----------------------------------------
Command "/usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-3DGGMT/pyzmq/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-i08whT-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-3DGGMT/pyzmq
このエラーから判じ物で、rpm/redhatに注目。rpm-develとそれに順づるredhat何とか ってのを入れた。(もう忘れた)
で、何とか
[sakae@fedora ~]$ ipython Python 2.7.11 (default, Mar 31 2016, 20:46:32) Type "copyright", "credits" or "license" for more information. IPython 4.2.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]:
ここまでは漕ぎつけた。
[sakae@fedora ~]$ julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.4.5 (2016-03-18 00:58 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | i686-redhat-linux
julia> Pkg.update()
julia> Pkg.add("IJulia")
julia> using IJulia
julia> notebook()
で、アクセス出来るはずなんだけど、動かん。まあ、ものには手順ってものが有るので 順番にヤレヤレ。サーバーの設定をする。
Running a notebook server を見て、設定を作る。ウブでやったのと内容はほぼ同じけど、ちと名前が違った。
[sakae@fedora ~]$ cat .jupyter/jupyter_notebook_config.py c = get_config() c.NotebookApp.ip = '*' c.NotebookApp.password = u'sha1:a70cef849bc7:e7ad97c1358f647af3f9ca231e33d9a4e4f1a09e' c.NotebookApp.open_browser = False c.NotebookApp.port = 9999 c.NotebookApp.notebook_dir = '/home/sakae/notebook'
起動は、下記のようにする。
[sakae@fedora ~]$ jupyter notebook &
へー、jupyter-notebookってスクリプトが動くのか。多分、数行だろうから見ておけ。
[sakae@fedora ~]$ ps a 1872 pts/1 S+ 0:00 /usr/bin/python /usr/bin/jupyter-notebook
これを見て、分かった積もりになれとはな!
[sakae@fedora ~]$ cat /usr/bin/jupyter-notebook
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from notebook.notebookapp import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
お友達コマンドが沢山あったぞ。それぞれ何用? 説明をみなくても一発で分かる人は 凄いと思うな。
[sakae@fedora ~]$ ls /usr/bin/jupyter* /usr/bin/jupyter /usr/bin/jupyter-notebook /usr/bin/jupyter-console /usr/bin/jupyter-qtconsole /usr/bin/jupyter-kernelspec /usr/bin/jupyter-serverextension /usr/bin/jupyter-migrate /usr/bin/jupyter-troubleshoot /usr/bin/jupyter-nbconvert /usr/bin/jupyter-trust /usr/bin/jupyter-nbextension
[sakae@fedora ~]$ jupyter kernelspec list Available kernels: python2 /usr/lib/python2.7/site-packages/ipykernel/resources julia-0.4 /home/sakae/.local/share/jupyter/kernels/julia-0.4
詳しくは、こういう所から始めなさいと言う声が有り。
これ、jupyterのfirefox画面に出てきた、ヘルプの案内でした。
ああ、サーバーの起動画面に、
/usr/lib/python2.7/site-packages/widgetsnbextension/__init__.py:30: UserWarning: To use the jupyter-js-widgets nbextension, you'll need to update
the Jupyter notebook to version 4.2 or later.
the Jupyter notebook to version 4.2 or later.""")
[W 05:37:13.950 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
こんなのが出てるけど、取りあえず無視の方向です。
ああ、そうそう、インストール直後にjupyterを起動すると、socket.pyでソケットを 取得出来ないエラーが発生した(meth関数がエラーを検出)。その日は諦めて、翌日にマシンを再起動したら 何事も無かったがのごとく、正常に起動した。これって何なの?
それから、Windows7側のfirefoxからは接続出来ない。これって、fedoraに特有の SELinuxとやらの、硬い壁が邪魔してる? それとも、火壁が構築されてる? これは、 要調査だな。
「SELinuxのせいで動かない」撲滅ガイド ソケットは大事な資源だぞーって事だな。
そして、火壁の方は、
[sakae@fedora ~]$ sudo firewall-offline-cmd --list-all-zones
とかやってみた。どのゾーンを見ても、httpってのは許していない。穴を開けるには どうしたら良いの? こういう面倒そうなインターフェースを経由するんじゃなくて、直接に設定ファイルを 編集しちゃいたい、CUIおじさんが嘆いております。
[sakae@fedora etc]$ sudo tree firewalld/
firewalld/
├── firewalld-server.conf
├── firewalld-standard.conf
├── firewalld-workstation.conf
├── firewalld.conf -> firewalld-server.conf
├── icmptypes
├── lockdown-whitelist.xml
├── services
└── zones
└── FedoraServer.xml
現在は、サーバーバージョンで動いていて、そいつの設定がxmlで登録されてるって、 予測される。xmlが出てきた時点で、直接編集するなって言う、強いメッセージを 感じますよ。もうヤメヤメ。
["CentOS7(RHEL7) Firewalldの基礎の基礎" https://www.jdbc.tokyo/2014/10/centos7-firewalld-startup/]
最後に、ジュピターさんの残した足跡を確認しとく。pythonでの実行
>|
"outputs": [
{
"data": {
"text/plain": [
"(-1+1.2246467991473532e-16j)"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import cmath\n",
"cmath.exp( 1j * cmath.pi )"
]
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
そしてjuliaでの実行。
"outputs": [
{
"data": {
"text/plain": [
"-1.0 + 1.2246467991473532e-16im"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"e^(1im * pi)"
]
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.4.5"
}
やっぱり、こいうジェイソンは、読むものでは有りません。使うものです。 機械可読は、人間可読じゃあーりませんです。