WSL2 に Anaconda をインストールして JupyterLab を使う

# はじめに

データ視覚化、機械学習、データマイニング用ツールとして JupyterLab を使用するため Anaconda をインストールする。ローカルの Windows 環境にインストールすることもできるが、できるだけローカル環境を汚したくない、かつ Docker で環境を作成するのはめんどくさそうだったため、WSL2 (Ubuntu-18.04) に Anaconda をインストールしてそこから JupyterLab を使用することとした。

（2021/7/8 修正）
~/.jupytetr/jupyter_lab_config.py にて `c.LabApp.open_browser = False` をコメントアウトして `c.LabApp.use_redirect_file = False` を追記。これで `$ jupyter lab` 実行時に自動でウィンドウが立ち上がる。

# Anaconda インストーラのダウンロード

適当なディレクトリで以下コマンドを実行し、インストーラをダウンロードする。URL は[ここ](https://www.anaconda.com/products/individual#Downloads)の Anaconda Installers から調べる。

```
$ wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
```

# Anaconda のインストール

上記コマンドでシェルスクリプトがダウンロードされたので、以下で実行する。

```
$ bash Anaconda3-2021.05-Linux-x86_64.sh
```

上記実行後に [Enter] を押すと、規約が表示される（`q` でスキップ可能）ので [yes] と打ち込んで同意する。その後インストール先が聞かれるが、デフォルトのままで進める。最後の `conda init` の実行をするかどうか聞かれるので、[yes] を選択すると .bashrc 末尾に各種設定がされる。設定を反映させるために `source ~/.bashrc` を実行すると、`(base) [user name]:~$ ` のような画面になる。

# Jupyter Lab の実行

この状況で、`$ jupyter lab` を実行しても一瞬なにか表示がされるがその後なにも起きない。調べたところ、以下のような環境設定を行う必要があるとのこと。

### 1. jupyter_lab_config.py の作成

`$ jupyter lab --generate-config` を実行すると、 ~/.jupyter/jupyter_lab_config.py が作成される。

### ~~2. c.LabApp.open_browser = False を追記~~

~~設定ファイルである ~/.jupyter/jupyter_lab_config.py の末尾に `c.LabApp.open_browser = False` を追記すると、`$ jupyter lab` 実行で表示される http://localhost:8888/lab?token=xxxxxxxxxx のような URL にアクセスすることで JupyterLab を使用できる。~~

token が毎回生成されてそれを指定してアクセスするのはめんどくさいので、[jupyter labをリモートから使う](https://qiita.com/RayDoe/items/e1ec21c63a15adb1a061)を参考にして、以下設定も合わせて実行。

### 3. パスワードのハッシュ値を生成

以下を実行し、パスワードのハッシュ値 ('sha1:xxxxxxxxxx') をコピーして、テキストファイルなどに保存する。 

```
$ ipython
In  [1]: from IPython.lib import passwd
In  [2]: passwd()
Out [2]: 'sha1:xxxxxxxxxx'
In  [3]: exit()
```

~/.jupyter/jupyter_lab_config.py の末尾に `c.LabApp.password ='sha1:xxxxxxxxxx'` を追記すると、`$ jupyter lab` 実行で表示される http://localhost:8888/lab のようにトークンなしの URL で JupyterLab にアクセスできるようになる。

### 4. (2021/7/8 追記) c.LabApp.use_redirect_file = False を追記

設定ファイルである ~/.jupyter/jupyter_lab_config.py の末尾に `c.LabApp.use_redirect_file = False` を追記すると、`$ jupyter lab` 実行で自動でウィンドウが立ち上がる。

# (2021/6/21 追記) conda install が成功しない場合の対応

WSL2 ターミナル上で、`$ conda install [package]` を実行するも以下エラーが繰り返され、インストールができない。

```
$ conda install [package]
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
```

[conda updateで「Solving environment: failed」となった時の解決法](https://qiita.com/jordi/items/cd974b668e7ecf312543)に従って、以下コマンドを実行するとインストールできるようになった。

```
$ conda install anaconda
$ conda update --all
```

またパッケージによっては、PackagesNotFoundError: The following packages are not available from current channels: というエラーが出るものもあるので、`$ conda config --append channels conda-forge` でレポジトリリストを追加しておく。（この例は conda-forge を追加しただけで、その他レポジトリリストも同様に追加できる。）
すでに追加されているレポジトリリストを確認するには `$ conda config --get channels`、レポジトリリストを削除するには `$ conda config --remove channels conda-forge` を実行すればよい。

# (2021/6/21 追記) JupyterLab 拡張機能

[JupyterLabのすゝめ](https://qiita.com/kirikei/items/a1639954ce5ccaf7ac3c)を参考に拡張機能を入れる。以下コマンドで nodejs をインストールし、アップデートする。

```
$ conda install nodejs
$ conda list | grep nodejs
nodejs                    6.13.1                        0    conda-forge
$ conda update nodejs
nodejs                    15.14.0              h92b4a50_0    conda-forge
```

上記で拡張機能を入れる前準備ができる。

# おわりに

意外と時間がかかったが、WSL2 で JupyterLab を扱えるようになった。いちいち localhost:8888/lab にアクセスするのが手間なので、そのあたりなんとかできないかなあ。