[TOC]
1. 便利機能
- youtubeの動画をjupyter上に貼り付ける
from IPython.display import YouTubeVideo
YouTubeVideo("cFHHPKp1Tao")
下記のcFHHPKp1Tao
の部分はyoutube>SHARE
で出てくるyoutu.be/以下(詳細は下記参照)
2. インストール
2.0.1. 環境設定
Mac | pyenv>Phothon3.6.3 OS:High Sierra 10.13.3 |
---|---|
CeotOS | pyenv 1.2.1-7-gf114557>Phothon3.6.3 virtualenv CentOS Linux release 7.4.1708 (Core) |
2.0.2. 手順
pip install --upgrade pip #pip install notebook pip --no-cache-dir install -I notebook pip install jupyter_contrib_nbextensions #拡張機能が必要な場合 jupyter contrib nbextension install --user #拡張機能が必要な場合 jupyter notebook --generate-config
2.0.3. トラブルシューティング
if we come across the error in (line4) like this
from pysqlite2 import dbapi2 as sqlite ImportError: No module named 'pysqlite2'
- install sqlite-devel
yum install sqlite-devel
- reinstall python
# uninstall virtualenv-name/ python version pyenv uninstall 3.6.3 # reinstall python pyenv install 3.6.3 # reinstall jupyter notebook pip install --no-cache-dir -I notebook
- install sqlite-devel
3. 拡張機能
3.0.1. 拡張機能をインストール
pip install jupyter_contrib_nbextensions #拡張機能が必要な場合
jupyter contrib nbextension install --user #拡張機能が必要な場合
3.0.2. Vimのキーバインドを入れる
URL通り(クローン先はコマンドjupyter --path
で調べる)
cd /home/{username}/.pyenv/versions/3.6.3/share/jupyter
mkdir nbextensions
git clone https://github.com/lambdalisue/jupyter-vim-binding ./
3.0.3. 背景色をvim likeにする
# install jupyterthemes
pip install jupyterthemes
# upgrade to latest version
pip install --upgrade jupyterthemes
jt -t chesterish -f roboto -tfs 10 -nfs 10 -dfs 7 -lineh 130 -ofs 10 -N
#オプション
#https://github.com/dunovank/jupyter-themes
3.0.4. cssの調整(編集画面を暗くする)
~/.jupyter/custom/custom.css
を編集します。div.cell.edit_mode {という一行がありますので、その直前に下記を挿入します。
/* Jupyter cell is in normal mode when code mirror */
.edit_mode .cell.selected .CodeMirror-focused.cm-fat-cursor {
background-color: #000000 !important;
}
/* Jupyter cell is in insert mode when code mirror */
.edit_mode .cell.selected .CodeMirror-focused:not(.cm-fat-cursor) {
background-color: #000000 !important;
}
出力結果(エラー文を含む)が見切れる場合
~/.jupyter/custom/custom.css
の以下を追記及び編集
div.output_subarea.output_text.output_stream.output_stdout,
div.output_subarea.output_text {
font-family: "Roboto Mono", monospace, monospace;
...
margin-left: 11.5px;←ここを編集
}
div.output_subarea {
overflow-x: auto;
padding: 1.1em !important;←ここを編集
...
}
:
3.0.5. おすすめ拡張機能
name | Expalain |
---|---|
Table of Contents(2) | 目次を作成作成.反映されない場合は以下を参照 |
Collapsible Headings | 目次の項目ごとにCellを閉じることが出来る. |
Codefolding | コードをindent毎に閉じることが出来る. |
Highlight selected word | カーソルがある変数に対して色をつける(文字列の置換時に便利) ハイライトじゃなく枠線で表示するカスタマイズ方法 |
Python Markdown | コード内の変数をMarkdownモードで表示できる. |
AutoSaveTime | 定期的に自動保存 |
Hinterland | 補完機能(多少邪魔) |
3.0.6. Hightlight selected word
カーソル付近の単語と同じ単語をハイライト及び枠で強調するカスタマイズ方法 英語
ハイライトカラーを変更~/.jupyter/jupyter_notebook_config.py
from notebook.services.config import ConfigManager
cm = ConfigManager()
cm.update(
'notebook',
{'highlight_selected_word':
{
'delay': 500,
'code_cells_only':True,
'highlight_color':'#F0CD59',
'outlines_only':True
}
}
)
4. Jupyter をリモートサーバーで実行
4.0.1. 対応環境
- リモートサーバーにグローバルIPが割り当てられていない
- リモートサーバーにはアクセスするためには経由サーバーが必要な場合.(自宅からdsサーバーにアクセスする場合など)
以下では自宅からjupyterをds上で実行する方法を説明する(pasはnuma経由でないと自宅からログイン出来ない)
4.0.2. 事前準備
4.0.3. リモートサーバーでssh接続設定
jupyterの設定ファイルを作成
$jupyter notebook --generate-config
~/.jupyter/jupyter\_notebook\_config.py
というファイルが作成される.certification fileを作成
cd ~/.jupyter/openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
ハッシュ化されたパスワードを取得
(remote サーバー上で以下を順に実行)
$ipython
from notebook.auth import passwdpasswd()>>Out[2]:'sha1:[ハッシュ化されたログインパスワード]'
jupyterの設定ファイル(
~/.jupyter/jupyter\_notebook\_config.py
)に以下を設定全てのipから接続を許可
c.NotebookApp.ip = '0.0.0.0'
IPython notebookのログインパスワードを設定(2.で作成したハッシュ化されたパスワードを使う)
c.NotebookApp.password = 'sha1:[ハッシュ化されたログインパスワード]'
certification fileを設定
c.NotebookApp.certfile = u'/home/{useraname}/.jupyter/mycert.pem'
c.NotebookApp.keyfile = u'/home/{username}/.jupyter/mykey.key'
サーバーポートのデフォルト設定
c.NotebookApp.port = {port}
{port}は1024~65535の間で指定(9999など)
4.0.4. configの設定
local(Mac)の~/.ssh/config
に以下を追記
Host host1
HostName ???.?.???.?? #host1のIPアドレス ?はセキュリティ上隠した数字
IdentityFile ~/.ssh/id_rsa
User {username}
Host host2
HostName ??.??.??.?? #host2のIPアドレス
IdentityFile ~/.ssh/id_rsa
User {useraname}
4.0.5. bash_profileの設定
Mac(local)の~/.bash_profile
に以下を追記
alias nssh="ssh -oProxyCommand='ssh -CW %h:%p host1' $@"
これによりMacでnssh {remote_host}
と打つとhost1経由で{remote_host}
にログイン出来る.
$@
はnsshコマンド後に打つの全ての引数を表す.
4.0.6. jupyterをリモートサーバー上で実行
サーバー(今回は
{host2}
)にログインローカル(Mac)上で
(ネットワーク内からログイン)→
$ssh {host2}
(上記以外からログイン)→
$nssh {host2}
サーバー上(ds)でポートが空いているか確認
$lsof -i:40100
>COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME >jupyter-n 4371 akirat 4u IPv4 1026721 0t0 TCP *:40100 (LISTEN)
→ポートが使用されている(出力が何も無いときは使用されていない)
`$nmap -p 40100-40200 localhost`
(例1)
` >...`
`>All 101 scanned ports on localhost (???.?.?.?) are closed`
`>...`
→40100~40200まで全てのportが開いてる.
(例2)
`>Not shown: 100 closed ports`
`>PORT STATE SERVICE`
`>40100/tcp open unknown`
→40100のportが使用されていて,40101~40200のportは空いている.
リモートサーバー上でポートを指定してjupyterを起動
以下のコマンドで{port}の部分は開いてるポート番号を指定
jupyter notebook --no-browser --port={port}
ローカルの開いてるポート番号を確認(Mac上で以下を実行)
{port}が空いているか確認
lsof -i :{port}
何も表示されない場合はそのポートが空いている
ポート転送機能を用いてサーバー(host2)との接続をローカルホストでの接続として確立
ローカル(Mac)上で
{local_port}はMac上で開いてるportを指定.
{remote_port}はサーバー上でjupyterを開く時に用いたport
{remote_host}はdsなどconfigで設定してるhostname
ネットワーク外からログイン↓↓nssh -N -f -L localhost:{local_port}:localhost:{remote_port} {host2}
ネットワーク内からログイン↓↓ssh -N -f -L localhost:{local_port}:localhost:{remote_port} {host2}
-L
->Local Socket,-N
->コマンド実行無し(None execution ?).-f
->バックグラウンドで動作サーバー上のjupyterをブラウザ経由で表示
(Chromeなどブラウザを開いてURLに以下を打ち込む)
https://localhost:{local_port}
4.0.7. 関連コマンド
自分が開いてるportを確認して必要ないものを削除
想定場面
サーバー上でscreenやtmuxコマンドを使用して,閉じ忘れたportがある場合.
手順
自分が開いたportを表示
$lsof -i
>COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
>jupyter-n 31226 {username} 3u IPv6 {DEVEICE SIZE} 0t0 TCP *:40100 (LISTEN)
>jupyter-n 31226 {username} 9u IPv6 {DEVEICE SIZE} 0t0 TCP localhost:40100->localhost:57126 (ESTABLISHED)
→プロセスID 31226でport40100が使用されている.
必要のないプロセスを削除
$kill -9 31226
4.0.8. 参考文献
5. トラブルシューティング
jupyter notebookを起動されるとfirbiddenと表示され何も出来なくなる.(ディレクトリ参照、ファイル表示)
対処法
ブラウザのcaheをcookiesも含めて削除
原因候補
jupyterのextension追加に失敗
- 試した手法
jupyter, ipythonのアンインストール→失敗 - 参考URL
- 試した手法