Python

Jupyter Lab 2.0の導入(2020年3月)

以前、JupyterLabをWindowsに導入する手順を記載しましたが、JupyterLabのバージョンも変わってきているので、改めて2020年3月時点での手順をまとめておきます。
(当時のJupyterLabのバージョンは0.35.3などでしたが、現時点では2.0.0になっています)

前提の環境

今回JupyterLabを導入する環境は次の通りです。

JupyterLabを導入するだけなら、Node.jsは不要です。
今回はJupyterLab上でCode Formatter(コード整形)機能を使うためにNode.jsを導入しています。

JupyterLabの導入

Pythonの新しい仮想環境(lab)を作成して、JupyterLabを導入するまでの手順になります。パスなどは、適宜読み替えてください。

仮想環境の作成

コマンドプロンプトを起動して、以下のコマンドでPythonの仮想環境を作成します。

:: Pythonの仮想環境を作成(g:\venvs\lab)
python -m venv g:\venvs\lab

cd /d g:\venvs\lab
g:\venvs\lab\Scripts\activate.bat 

:: パッケージの更新(任意)
python -m pip install --upgrade pip

:: JupyterLabの導入
pip install jupyterlab

これでJupyterLabのインストールは完了です。導入されたパッケージは次の通りです。

(lab) g:\venvs\lab>pip list
Package           Version
----------------- -------
attrs             19.3.0
backcall          0.1.0
bleach            3.1.1
colorama          0.4.3
decorator         4.4.2
defusedxml        0.6.0
entrypoints       0.3
ipykernel         5.1.4
ipython           7.13.0
ipython-genutils  0.2.0
jedi              0.16.0
Jinja2            2.11.1
json5             0.9.2
jsonschema        3.2.0
jupyter-client    6.0.0
jupyter-core      4.6.3
jupyterlab        2.0.1
jupyterlab-server 1.0.7
MarkupSafe        1.1.1
mistune           0.8.4
nbconvert         5.6.1
nbformat          5.0.4
notebook          6.0.3
pandocfilters     1.4.2
parso             0.6.2
pickleshare       0.7.5
pip               20.0.2
prometheus-client 0.7.1
prompt-toolkit    3.0.3
Pygments          2.5.2
pyrsistent        0.15.7
python-dateutil   2.8.1
pywin32           227
pywinpty          0.5.7
pyzmq             19.0.0
Send2Trash        1.5.0
setuptools        41.2.0
six               1.14.0
terminado         0.8.3
testpath          0.4.4
tornado           6.0.4
traitlets         4.3.3
wcwidth           0.1.8
webencodings      0.5.1

JupyterLabの起動方法

導入したJupyterLabは仮想環境のコンソールから起動することもできますが、Windowsのショートカットキーを作っておくと便利です。

仮想環境のコンソールから起動する方法

仮想環境のコンソールからJupyterLabを起動する場合の手順です。

:: 仮想環境を有効にしていない場合は有効にする
g:\venvs\lab\Scripts\activate.bat

:: JupyterLabのFile Browserに表示したい任意のフォルダに移動
:: JupyterLabを起動したときのカレントフォルダが、JupyterLabのルートフォルダになります
cd /d g:\devs\myProjects

:: JupyterLabの起動
jupyter lab

Windowsのショートカットから起動する方法

Windowsのショートカットを作成しておくと、仮想環境を有効にしてJupyter Labを起動する手間が省けるので便利です。
Jupyter Labを起動するショートカットは、以下の手順で作成できます。

  1. デスクトップなどで右クリック→新規作成→ショートカットを選択
  2. ショートカット項目の場所に以下の内容を入力(パスは環境に合わせて読み替え)
    C:\Windows\System32\cmd.exe /c “g:\venvs\lab\Scripts\activate.bat”&&start /b jupyter lab
  3. ショートカット名には任意の分かりやすい名前を設定
  4. 作成されたショートカットを右クリック→プロパティ
  5. JupyterLabのFile Browserに表示させたいフォルダを「作業フォルダー」に設定
  6. 必要に応じてアイコンなどを変更

起動したJupyterLabを終了するには、JupyterLabの画面からFile> Shut Downを選択します。ブラウザを閉じてしまった場合などは、コンソール画面からCtrl+Cで終了させることもできます。

コード整形機能の追加

JupyterLabでコード整形(コードフォーマット)を行うために、JupyterLab Code Formatterの導入と設定を行います。導入手順の詳細は本家サイトのドキュメントにも記載してあります。

Pythonのコードフォーマッターは、Black、YAPF、Autopep8、Isortから選択できるのですが、今回は比較的新しいBlackを選択しました。
Blackを利用する場合、2020/03/07時点ではBlack用のキャッシュフォルダを手動で作成する必要があるので、その手順も載せておきます。

JupyterLab Code Formatterの導入

以下の手順で、コードフォーマッターのBlackと、BlackをJupyterLabから利用するためのJupyterLab Code Formatterを導入します。
Black以外のコードフォーマッターを導入する場合は、 本家サイトのドキュメントなども参考にしながら都度読み替えてください。

:: 仮想環境を有効にしていない場合は有効にする
g:\venvs\lab\Scripts\activate.bat
cd /d g:\venvs\lab

:: 利用するコードフォーマッターを導入(Black, YAPFなど)
:: 今回はBlackを選択
:: YAPFの場合は「pip install yapf」
pip install black

:: JupyterLab Code Formatterの導入
pip install jupyterlab_code_formatter

:: JupyterLab Code Formatterのインストール
:: 事前にNode.jsの導入が必要
jupyter labextension install @ryantam626/jupyterlab_code_formatter
jupyter serverextension enable --py jupyterlab_code_formatter

Black用のキャッシュフォルダ作成(Blackを使う場合のみ)

Blackを使っている場合、%LocalAppData%(各ユーザーのAppData\Localフォルダ)配下のblackフォルダを参照するようなので、このフォルダが存在しないとJupyterLabの起動時に次のようなエラーメッセージが表示されます。

Generating grammar tables from g:\venvs\lab\lib\site-packages\blib2to3\Grammar.txt
Writing grammar tables to C:\Users\Kurozumi\AppData\Local\black\black\Cache\19.10b0\Grammar3.8.2.final.0.pickle
Writing failed: [Errno 2] No such file or directory: 'C:\\Users\\Kurozumi\\AppData\\Local\\black\\black\\Cache\\19.10b0\\tmpwpe91iix'
Generating grammar tables from g:\venvs\lab\lib\site-packages\blib2to3\PatternGrammar.txt
Writing grammar tables to C:\Users\Kurozumi\AppData\Local\black\black\Cache\19.10b0\PatternGrammar3.8.2.final.0.pickle
Writing failed: [Errno 2] No such file or directory: 'C:\\Users\\Kurozumi\\AppData\\Local\\black\\black\\Cache\\19.10b0\\tmpb79apzwg'

このフォルダは手動で作らない限り作成されないようなので、次のコマンドでBlack用のフォルダを作成します。ディレクトリ名(19.10b0の部分)はBlackのバージョンによって変わると思うので、エラーメッセージ等から作成するフォルダ名を判断してください。

mkdir %LocalAppData%\black\black\Cache\19.10b0

フォルダを作成すれば、次のようにBlackのエラーは表示されなくなります。

Generating grammar tables from g:\venvs\lab\lib\site-packages\blib2to3\Grammar.txt
Writing grammar tables to C:\Users\Kurozumi\AppData\Local\black\black\Cache\19.10b0\Grammar3.8.2.final.0.pickle
Generating grammar tables from g:\venvs\lab\lib\site-packages\blib2to3\PatternGrammar.txt
Writing grammar tables to C:\Users\Kurozumi\AppData\Local\black\black\Cache\19.10b0\PatternGrammar3.8.2.final.0.pickle

JupyterLab Code Formatterの設定

ショートカットキーでフォーマットできた方が便利なので、以下の手順でJupyterLabのショートカットキーを設定します。(Black以外を使う場合はblackの部分をyapfなど、利用するフォーマッターに合わせて読み替えてください)

本家サイトのドキュメントでは「Ctrl+K→Ctrl+M」というショートカットキーを割り当てる例になっていますが、私の場合はVisual Studioと同じ「Ctrl+K→Ctrl+D」というショートカットキーを割り当てています。

  • JupyterLabを起動(ブラウザが開く)
  • Settings> Advanced Settings Editor(Ctrl+,) > Keyboard Shortcutsを選択
  • 右側のUser Preferencesに次のコードを追加して保存
{
    "shortcuts": [
        // JupyterLab Code Formatter (black)
        {
            "command": "jupyterlab_code_formatter:black",
            "keys": [
                "Ctrl K",
                "Ctrl D"
            ],
            "selector": ".jp-Notebook.jp-mod-editMode"
        }
    ],
}

これで、JupyterLab上で「Ctrl+K→Ctrl+D」を押せば自動でBlackを使ったコード整形が行われるようになります。

JupyterLabの設定(ショートカットの設定など)は、デフォルトでは利用しているPythonの仮想環境に関係なく「%UserProfile%.jupyter」フォルダ配下に共通で格納されます。

仮想環境ごとに個別の設定ファイルを使いたい場合は、下記のTipsにある「設定ファイルの場所を変更する」を参考にしてください。

JupyterLabのコンテキストメニュー(右クリックで表示されるメニュー)にあるFormat cellで利用されるデフォルトのフォーマッターは、JupyterLabの「Settings> Advanced Settings Editor (Ctrl+,)> Jupyterlab Code Formatter」から変更できます。(デフォルトではBlackが利用されるようになっている)

また、各種フォーマッターの設定なども、ここから変更できます。

どのフォーマッターを使うかは好みが分かれるところだと思いますが、私の場合はYAPFからBlackに乗り換えました。
細かいフォーマットを定義したければYAPFがよいと思いますが、設定項目が少なくて、誰が設定しても同じようなフォーマットになるBlackは魅力的です。(設定項目が少ない分、細かい設定に時間をとられることもないのでおすすめです)

Tips

JupyterLabに関するTipsを載せておきます。

設定ファイルの場所を変更する

JupyterLabに関する個別の設定(ショートカットの設定など)は、デフォルトでは「%UserProfile%.jupyter」フォルダが使用されます。
このフォルダは全てのJupyterLab環境で共通になっているため、そのままでは仮想環境ごとにJupyterLabの設定を切り替えられません。

仮想環境ごとに(もしくは特定の仮想環境で)個別の設定ファイルを利用したい場合、環境変数「JUPYTER_CONFIG_DIR」を利用して設定ファイルの場所を変更できます。

具体的には、次のような形で、JupyterLabを起動する直前でJUPYTER_CONFIG_DIRを指定します。指定したフォルダは存在しなければ自動作成されるので、事前に作成しておく必要はありません。

:: コンソールでJupyterLabを起動している場合
:: これで「g:\venvs\lab\.jupyter」フォルダ配下に設定ファイルが作成される
set JUPYTER_CONFIG_DIR=g:\venvs\lab\.jupyter
jupyter lab

:: Windowsのショートカットで起動している場合は、以下のコマンドを登録
:: JupyterLabを起動する前に&&で環境変数の設定を入れる
:: ※仮想環境のパスなどは適宜読み替えてください
C:\Windows\System32\cmd.exe /c "g:\venvs\lab\Scripts\activate.bat"&&set JUPYTER_CONFIG_DIR=g:\venvs\lab\.jupyter&&start /b jupyter lab