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" }
やっぱり、こいうジェイソンは、読むものでは有りません。使うものです。 機械可読は、人間可読じゃあーりませんです。