📒

JupyterLabでオートコンプリート(Kite)を導入する

2 min read

はじめに

本来はこちらの記事は「ドキュメントを読めばいい」で済むが、インストールする過程でエラーが発生したのと、一応のそれへの対処のメモとして残しておく。

https://twitter.com/auratus/status/1356982450556080132

開発環境

Windows 10
Python 3.7.8
jupyterlab 3.0.7
jupyterlab-kite 2.0.2
jupyterlab-server 2.1.3

インストール方法

  1. Jupyter Labのインストール
    pip install jupyterlab
    
  2. Kiteのインストール
    インストーラーを使用してインストール。
  3. NodeJSのインストール
    インストーラーを使用してインストール。
    テーマパッケージのビルドにwebpackなどを使用していたり、TypeScriptで書かれているケースもあり、npmビルドが必要になるため。
    因みに、僕は通常のインストーラーでバージョン管理ができなくなるのが嫌いなので、nvm-windowsでインストールしている。
  4. JupyterLab KiteとJupyterエクステンションのインストール
    pip install "jupyterlab-kite>=2.0.2"
    jupyter labextension install "@kiteco/jupyterlab-kite"
    
    こちらJupyterLabのバージョンに応じて、バージョン指定があることもあるので、インストールドキュメントも参照すること。

ドキュメント的には、pip install "jupyterlab-kite>=2.0.2"のみですべてインストールされるように書かれているが、個人環境だとエクステンションまでのインストールはしてくれなかったので、追加で拡張機能のインストールコマンドを実行した。

実行

通常通りにJupyter Labを実行する。

jupyter lab

トラブルシュート

CP949 encoding error

次の様なエラーメッセージが発生する。

File "f:\develop\.venv\lib\site-packages\jupyterlab_server\config.py", line 37, in get_federated_extensions
    pkgdata = json.load(fid)
File "C:\Users\takanori\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 293, in load
    return loads(fp.read(),
UnicodeDecodeError: 'cp932' codec can't decode byte 0x82 in position 523: illegal multibyte sequence

原因

jupyter-server モジュールのJSONリードするためのファイルの開き方が、JSONがマルチバイトの文字を読めないにも関わらず生の状態で開かれてしまっている。

解決方法

方法1

ソースを書き換える。

<Lib Root>\site-packages\jupyterlab_server\config.py

を、以下の様に書き換える。

def get_federated_extensions(labextensions_path):
    ~~~
            with open(ext_path, encoding="utf-8") as fid:
                pkgdata = json.load(fid)
    ~~~

方法2

こちらの問題、本家のレポジトリにIssue/PRを出して、Approve/Merge済み。

https://github.com/jupyterlab/jupyterlab_server/issues/155

https://github.com/jupyterlab/jupyterlab_server/pull/158

jupyterlab-server==2.1.5 で適応されているので、jupyterlab-serverをアップデートする。

pip install -u jupyter-server==2.1.5

最後に

とりあえず、そこまで問題なく導入ができた。
コンプリート機能も結構いい感じに補完してくれるKiteさんなので、これからも付き合っていきたいところ。

Discussion

ログインするとコメントできます