Open6

memo: jupyterlab

kiaikiai

端的に言えば開発プロジェクトが大きくなりすぎててドキュメント作成がクソ雑になっているのであろうことは察せられるが (全人類は早く sphinx とかいうクソを捨てて Docusaurus を採用しろ)jupyter に関する情報源はササレホウサレ Referenceも付けられない似非デ一夕サ亻工ンティス卜様のメモで溢れてしまい最悪な状況になっている.ので自分用の信じられるはずの情報源とともにメモを残す.リファレンスを残すことの大切さを知れ俗物が.

kiaikiai

実行コマンドにオプション引数を渡す

For example, to get your extension to load via the command line add a double dash before the variable name, and put the Python dictionary in double quotes. If your package is “mypackage” and module is “mymodule”, this would look like
jupyter notebook --NotebookApp.nbserver_extensions="{'mypackage.mymodule':True}".
Basically the string should be Python importable.

jupyterlab の実行コマンドにオプションを渡す方法がどこを探してもわからなかったのでつらかった.--Var=key で指定せよとのことらしい.

Alternatively, you can have your extension loaded regardless of the command line args by setting the variable in the Jupyter config file. The default location of the Jupyter config file is ~/.jupyter/jupyter_notebook_config.py (see Configuration Overview). Inside the config file, you can use Python to set the variable. For example, the following config does the same as the previous command line example.

c = get_config()
c.NotebookApp.nbserver_extensions = {
   'mypackage.mymodule': True,
}

コマンドで指定する代わりに,ファイルで入力しておく方法も使える.設定項目が膨大にあることを考えると,引数で渡すよりも設定ファイルに書き込むほうが良さそうだ.

cf. 【魚拓】Custom request handlers — Jupyter Notebook 6.1.6 documentation(@archive.is)
cf. 【魚拓】Custom request handlers — Jupyter Notebook 6.1.6 documentation(@Web魚拓)

kiaikiai

Configuration Overview

Beyond the default configuration settings, you can configure a rich array of options to suit your workflow. Here are areas that are commonly configured when using Jupyter Notebook:

  • Jupyter’s common configuration system
  • Notebook server
  • Notebook front-end client
  • Notebook extensions

これまで意識してこなかったが,jupyter は①サーバ②フロントエンド③拡張機能の3つが合わさることによってその機能を実現している.よって設定項目についても,共通の設定が1つと,各領域の設定の3つがあるらしい.

とか思ってたら一番最後に④セキュリティに関する設定も存在していた(あんまり触れてほしくない雰囲気を感じる).結局,1つの共通設定,4つの細部設定が存在していることになる.

cf. 【魚拓】Configuration Overview — Jupyter Notebook 6.1.6 documentation(@archive.is)
cf. 【魚拓】Configuration Overview — Jupyter Notebook 6.1.6 documentation(@Web魚拓)

kiaikiai

Config file and command line options

The notebook server can be run with a variety of command line arguments. A list of available options can be found below in the options section.
Defaults for these options can also be set by creating a file named jupyter_notebook_config.py in your Jupyter folder. The Jupyter folder is in your home directory, ~/.jupyter.

To create a jupyter_notebook_config.py file, with all the defaults commented out, you can use the following command line:
$ jupyter notebook --generate-config

正常にインストールできてれば,ホームディレクトリに .jupyter っていうディレクトリがあるらしい.上記の説明だと noteboook になってるけど,jupyter lab --generate-config でもいけた.notebook よりも lab の方が開発盛んなわけだし,おそらくこっちにしとくのが良さそう(個人的推測).そしたらいよいよ設定ファイルの中を見ていくわけですが……めっちゃ多いし長い,つらい.

cf. 【魚拓】Config file and command line options — Jupyter Notebook 6.1.6 documentation(@archive.is)
cf. 【魚拓】Config file and command line options — Jupyter Notebook 6.1.6 documentation(@Web魚拓)

kiaikiai

Options (mainly)

一通りやってみて,今の自分に必要っぽいものだけ書き残す.


※もしdocker-compose 等を使っていれば,*.py ファイルにハードコーディングしなくても,① .env に必要事項を書く ② environment を渡してコンテナを建てる ③ python プログラム内で環境変数を読み込む(e.g. os.environ['ENV_NAME']) というプロセスを経れば,.env に記述を集約させることができる.

  • NotebookApp.allow_credentials:外部からの接続
  • NotebookApp.allow_password_change:パスワードの変更可否
  • NotebookApp.allow_rootroot での実行可否
  • NotebookApp.ip:実行IPの指定
  • NotebookApp.open_browser:ブラウザを開くか
  • NotebookApp.password:パスワード指定
    • 前述の os.environ と使うと便利(かつ,間違いが起こりにくい)
  • NotebookApp.password_required:パスワード利用の強制(SSH接続であっても)
  • NotebookApp.port:実行ポート指定
read more ...
import os  # for ENV operation
from IPython.lib import passwd  # for disable token authentification
# overwrite environment
os.environ['JUPYTER_PASSWORD'] = passwd(os.environ['JUPYTER_PASSWORD'])

c = get_config()  # Initialization

# Set the Access-Control-Allow-Credentials: true header
#  Default: False
c.NotebookApp.allow_credentials = False

#  This can be set to false to prevent changing password from the UI/API.
#  Default: True
c.NotebookApp.allow_password_change = False

# Whether to allow the user to run the notebook as root.
#  Default: False
c.NotebookApp.allow_root = False

# The IP address the notebook server will listen on.
#  Default: 'localhost'
c.NotebookApp.ip = '0.0.0.0'

# Whether to open in a browser after starting. The specific browser used is
#  platform dependent and determined by the python standard library `webbrowser`
#  module, unless it is overridden using the --browser (NotebookApp.browser)
#  configuration option.
#  Default: True
c.NotebookApp.open_browser = False

# Hashed password to use for web authentication.
#
#  To generate, type in a python/IPython shell:
#
#    from notebook.auth import passwd; passwd()
#
#  The string should be of the form type:salt:hashed-password.
#  Default: ''
c.NotebookApp.password = os.environ['JUPYTER_PASSWORD']

# Forces users to use a password for the Notebook server. This is useful in a
#  multi user environment, for instance when everybody in the LAN can access each
#  other's machine through ssh.
#
#  In such a case, serving the notebook server on localhost is not secure since
#  any user can connect to the notebook server via ssh.
#  Default: False
c.NotebookApp.password_required = True  # False

# The port the notebook server will listen on (env: JUPYTER_PORT).
#  Default: 8888
c.NotebookApp.port = int(os.environ['JUPYTER_PORT'])

cf. 【魚拓】Options | Config file and command line options — Jupyter Notebook 6.1.6 documentation(@archive.is)
cf. 【魚拓】Options | Config file and command line options — Jupyter Notebook 6.1.6 documentation(@Web魚拓)

kiaikiai

他にやりたいこと

  • ホームディレクトリおよび実行ユーザ名 を jovyan から変更する
  • 拡張機能の追加
  • 日本語を使えるようにする
  • 細かな調整のやり方を調べる
    • メモリ制限,実行時間制限,その他細やかなメトリクス
    • 元々はAtCoderとかようにローカルな環境を整えるのが目的だったので……
  • 多言語対応
    • rust, c++, bash, wolfram(!)
  • テスト環境
  • etc.