[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. トラブルシューティング

3. 拡張機能

3.0.1. 拡張機能をインストール

pip install jupyter_contrib_nbextensions #拡張機能が必要な場合
jupyter contrib nbextension install --user  #拡張機能が必要な場合

拡張機能(nbextension)が開かない場合の対処法

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. 事前準備

リモートサーバーにjupyterをインストール

4.0.3. リモートサーバーでssh接続設定

  1. jupyterの設定ファイルを作成

    $jupyter notebook --generate-config

    ~/.jupyter/jupyter\_notebook\_config.pyというファイルが作成される.

  2. certification fileを作成

    cd ~/.jupyter/openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

  3. ハッシュ化されたパスワードを取得

    (remote サーバー上で以下を順に実行)

    $ipython

    from notebook.auth import passwdpasswd()>>Out[2]:'sha1:[ハッシュ化されたログインパスワード]'

  4. jupyterの設定ファイル(~/.jupyter/jupyter\_notebook\_config.py)に以下を設定

    1. 全てのipから接続を許可

      c.NotebookApp.ip = '0.0.0.0'

    2. IPython notebookのログインパスワードを設定(2.で作成したハッシュ化されたパスワードを使う)

      c.NotebookApp.password = 'sha1:[ハッシュ化されたログインパスワード]'

    3. certification fileを設定

      c.NotebookApp.certfile = u'/home/{useraname}/.jupyter/mycert.pem'

      c.NotebookApp.keyfile = u'/home/{username}/.jupyter/mykey.key'

    4. サーバーポートのデフォルト設定

      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コマンド後に打つの全ての引数を表す.

ProxyCommandについてはの参考サイト

4.0.6. jupyterをリモートサーバー上で実行

  1. サーバー(今回は{host2})にログイン

    ローカル(Mac)上で

    (ネットワーク内からログイン)→$ssh {host2}

    (上記以外からログイン)→$nssh {host2}

  2. サーバー上(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は空いている.
  1. リモートサーバー上でポートを指定してjupyterを起動

    以下のコマンドで{port}の部分は開いてるポート番号を指定

    jupyter notebook --no-browser --port={port}

  2. ローカルの開いてるポート番号を確認(Mac上で以下を実行)

    {port}が空いているか確認

    lsof -i :{port}

    何も表示されない場合はそのポートが空いている

  3. ポート転送機能を用いてサーバー(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->バックグラウンドで動作

  4. サーバー上のjupyterをブラウザ経由で表示

    (Chromeなどブラウザを開いてURLに以下を打ち込む)

    https://localhost:{local_port}

4.0.7. 関連コマンド

  • 自分が開いてるportを確認して必要ないものを削除

    • 想定場面

      サーバー上でscreenやtmuxコマンドを使用して,閉じ忘れたportがある場合.

    • 手順

      1. 自分が開いた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が使用されている.

      2. 必要のないプロセスを削除

        $kill -9 31226

4.0.8. 参考文献

lsof,ss,nmapコマンド

port番号の割り振り

使用が危険なport番号

jupyterの設定ファイルの書き方

Config設定方法

ポートの削除コマンド

ログイン手順(英語)

5. トラブルシューティング

  • jupyter notebookを起動されるとfirbiddenと表示され何も出来なくなる.(ディレクトリ参照、ファイル表示)

    • 対処法

      ブラウザのcaheをcookiesも含めて削除

    • 原因候補

      jupyterのextension追加に失敗

      • 試した手法
        jupyter, ipythonのアンインストール→失敗
      • 参考URL
Last modified by akirat1993 2019-11-24 14:23:09
Created by akirat1993 2019-05-26 02:56:51

results matching ""

    No results matching ""