Ubuntu on WSL 2でpyenvとVimキーバインディングでダークなJupyter Notebookの導入

# はじめに

WSL2のUbuntuにpyenvとVimキーバインディングでダークなJupyter Notebookを導入したので備忘録として手順を纏めます。



# 導入環境

- Windows 10 バージョン 20H2 (OS ビルド 19042.508)
- Ubuntu 20.04 LTS on WSL 2



# penvインストール

パッケージ一覧の更新、パッケージを更新する。

```bash
sudo apt update
sudo apt upgrade
```



上記実行後、WSLを再ログインしてから下記パッケージをインストールし、再ログインする。

```bash
sudo apt install -y build-essential
sudo apt install -y libffi-dev
sudo apt install -y libssl-dev
sudo apt install -y zlib1g-dev
sudo apt install -y liblzma-dev
sudo apt install -y libbz2-dev libreadline-dev libsqlite3-dev 
```



pyenvをインストールし、bashrcに環境変数を追記する。

```bash
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
```



動作確認として最新のpython3系stable版をインストールしてみる。

```bash
# インストール可能なバージョンを確認する。
pyenv install --list
# pythonインストール（本手順では3.8.5）
pyenv install 3.8.5
# 上記バージョンに切り替える
pyenv global 3.8.5
# バージョン確認
python --version
```



# pipインストール

Jupyter Notebookの前にpipをインストールする。

```bash
sudo apt install python3-pip
# バージョン確認
pip --version
```



# Jupyter Notebookインストール

Jupyter Notebookをインストールする。

```bash
sudo -H apt install jupyter-notebook
```

起動確認する。

```bash
jupyter notebook
```

ブラウザで下記URLのアクセス確認する。

> http://localhost:8888/

ログインのパスワードを設定する。

```bash
jupyter notebook --generate-config
jupyter notebook password
```



# Vimキーバインド設定

Jupyter Notebook拡張機能管理パッケージNbextensionsをインストールする。

```bash
pip install jupyter_contrib_nbextensions
```

Nbextensionsのjavascript, cssをインストールする。

```bash
jupyter contrib nbextension install --user
```

拡張機能配置用ディレクトリを作成しカレントディレクトリにする。

```bash
mkdir -p $(jupyter --data-dir)/nbextensions
cd $(jupyter --data-dir)/nbextensions
```

vimバインディングパッケージをgitクローンする。

```bash
git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding
jupyter nbextension enable vim_binding/vim_binding
```

Jupyter Notebookを起動し、以下が表示されていれば利用可能。

- Nbextensionタブが表示されていること。
- Nbextensionの一覧にVim bindingが表示されていること。



# Jupyter Notebookダークモード設定

Jupyter Notebookを停止した状態で色やフォントを変更するためのパッケージ[jupyterthemes](https://github.com/dunovank/jupyter-themes)をインストールする。

```bash
pip install jupyterthemes
```

ダークな感じになるように設定する。

```bash
jt -t chesterish -T -f roboto -fs 9 -tf merriserif -tfs 11 -nf ptsans -nfs 11 -dfs 8 -ofs 8
```

キーバインドをVimにする場合は挿入モード、コマンドモードの表示がダークになる設定をする。

```bash
cat <<EOL >> ~/.jupyter/custom/custom.css
.edit_mode .cell.selected .CodeMirror-focused.cm-fat-cursor {
        background-color: #000000 !important;
}
.edit_mode .cell.selected .CodeMirror-focused:not(.cm-fat-cursor) {
        background-color: #000000 !important;
}
div.CodeMirror-dialog.CodeMirror-dialog-bottom {
        background: #000000 !important;
}
EOL
```



# 参考文献

ほぼ下記のQiita記事を参考にし、自身の備忘録として纏めさせて頂きました。ありがとうございました。

- [JupyterNotebookにVimの力を加えると、光と闇が両方そなわり最強に見える](https://qiita.com/_snow_narcissus/items/80f81926707807ee9bf1)
- [jupyter上でvimを使う](https://qiita.com/woody-kawagoe/items/415c6f369ab2a6972ae6)
- [Jupyter NotebookをWSLに構築](https://qiita.com/hiiragi1104/items/c2e9042bc6170873a859)
- [ubuntu 20.04 に pyenv をインストールする話](https://qiita.com/neruoneru/items/1107bcdca7fa43de673d)