🐢

Gitpod上でのJupyter環境で、バージョンを7系から6系にしたお話

2023/08/30に公開

前に書いた記事ではGitpodというクラウド上でVSCodeライクな環境を使えるサービスを使って、クラウド上にJupyterのターミナルを置いてお手軽iPadでJupyter環境を整えていました

しかし、Jupyter Notebookが7系アップグレードされたことで問題が発生してしまった
iPadだとShft+Enterでのコードブロック実行後に次のコードブロックにカーソルが移動しない!

これ、いくつかのコードブロックを実行したいそき、右手小指でShiftキーを長押ししながら、薬指でEnterEnterEnter…って連続してコードブロックを実行できていたのができなくなっています。悲しい

なのでnotebookのバージョンを6系に落として以前と同じようにした。そんなお話
6系と7系の違いについて、軽くまとめたものも最後につけておきます。興味があればぜひ

そもそもGitpodとは

Gitpodは、クラウド上の開発環境を提供するプラットフォームのサービス
言い換えると、クラウド上で動かすVSCodeを、ブラウザで開いてしまえるってこと。AWSでいう、Cloud9

VSCodeにあるターミナルの部分でJupyter notebookを動かすわけだが、そのターミナルをクラウド上で動いて貰えばiPadでも、特別なアプリなしでJupyterの環境を用意できるという寸法

使い方は、githubのURLの頭にgitpod.io#をつけるだけ。かんたん

Gitpodで Jupyterの環境を作る

前回の記事で書いた設定ファイルをちょっと改変しました

かんたんな説明として、gitpodで詳細な環境をいじりたいときは、リポジトリ直下に.gitpod.ymlという設定ファイルを用意する
(とはいえ、設定しなくても大概のことはできるように、多数の言語がすでにインストールされている環境が用意されているのだが)

修正してできた設定ファイルはこんな感じ

ports:
 - port: 8888
   onOpen: open-browser
tasks:
  - name: open_jupyter
    init: "pip install --upgrade pip"
    before: |
      pip install -r requirements.txt
      pip uninstall -y notebook
      pip uninstall -y notebook
      pip install notebook==6.0.0
    command: "jupyter notebook --ip=* --NotebookApp.token=''

Jupyter用に用意した設定ファイルでは8888番でポートを開き、ライブラリインストール、そしてJupyterの起動をするという一連の動作を自動で実行してくれるようにしている

今回の記事では、Gitpodのデフォルト環境でのJupyterが7系にアップデートされたことが原因のため、一度アンインストールして、バージョン6.0.0を再インストールするという処理を9、10行目で追加した
(あとtaskの処理順を調べ直して修正した)

このとき、アンインストールを2回行っている(2023/09/14追記)
これは再起動時のための処理で、Gitpodデフォルトのコンテナの初期起動時と再起動時で挙動が若干異なるらしい
それぞれこんなシチュエーションになる

  • 初回起動時
    0. 初期コンテナで、notebook==7.0.2のみが入っている状態

    • この段階で入っているバージョンたち: ["7.0.2"]
    1. 1回目のpip uninstall -y notebookで、7.0.2を削除
    • バージョンたち: ["7.0.2"] => []
    1. 2回目のpip uninstall -y notebooknotebookモジュールがないので何もせずに終わる
    • バージョンたち: [] => []
    1. 改めてnotebook==6.0.0をインストールし直して実行
    • バージョンたち: [] => ["6.0.0"]
  • 再起動時
    0. 前回の終了時の状況で、バージョン6.0.0が入っている状態に加え、起動時に自動でデフォルト設定の、notebook==7.0.2が追加インストールされる

    • この段階で入っているバージョンたち: ["6.0.0", "7.0.2"]
    1. 1回目のpip uninstall -y notebookで、若いバージョンが削除される
    • バージョンたち: ["6.0.0", "7.0.2"] => ["7.0.2"]
    1. 2回目のpip uninstall -y notebookで自動追加インストール分を削除
    • バージョンたち: ["7.0.2"] => []
    1. 改めてnotebook==6.0.0をインストールし直して実行
    • バージョンたち: [] => ["6.0.0"]

こんな感じに、pip uninstall -y notebookを複数回行うことで、.ymlファイルのcommandタスクを実行する時には常にバージョン6.0.0のみがインストールされているようにしている
ここで誤って複数のバージョンが入ったままcommandタスクでjupyter notebookを起動しようとすると、No Module Errorで落ちてしまうようだ
(本来pipは1つのモジュールに対して1つのバージョンのみをインストールした状態で使うことが想定されているので、うまく動かないのも確かにそれはそう)
(ここまで追記)

それだけといえば、それだけなのだが、実際に該当リポジトリを複製して、リポジトリトップでURLにgitpod.io#をつける(もといiPadのショートカット機能で作った拡張を起動する)だけでお手軽Jupyter環境が起動できるのでお気に入り

パソコンつけるのすらめんどくさいなってとき、お試しあれ

おまけ: そもそも7系と6系の違いって?

Jupyterのドキュメントを見ると9個もの新機能があるらしい
以下ざっくり英訳まとめ

  1. 新しいデバッガー
    • セルごとにブレイクポイントをつけてのデバッグができる
  2. リアルタイムコラボレーション
    • コラボレーションするための拡張機能をpip install jupiter-collaborationでインストールすることで、リアルタイムのコード共有ができる
  3. コンテンツテーブル
    • 右端のサイドバーにコンテンツテーブルを追加。VSCodeでフォルダを開くをしていろんなファイルを縦横無尽に駆け巡る、アレ
  4. ダークテーマ
    • ダークテーマの拡張機能をpip install jupiter lab-nightで入手できる。目に優しい
  5. 多言語対応
    • pip install jupiter lab-language-pack-fr-FRでフランス語版を入手するデモンストレーションが公開されていた。language-packの中身を見る限り、jupyterlab-language-pack-ja-JPで日本語版もあるようだ
  6. アクセシビリティ改善
    • テキストエディタに関して、CodeMirror 5からCodeMirror 6にアップグレードした恩恵を受けられます
  7. たくさんのJupyterLab拡張をサポートしました
    • Language Server Protcolや、人気のあるnbgraderRISEなどをpipでインストールできるようになりました
  8. クラシックのノートブックのユーザーエクスペリエンスを維持しています
    • いや、まぁ、iPad + Bluetoothキーボードでがちゃがちゃやってる環境は、対象外ですよね
  9. モバイル版のコンパクトビューに対応
    • モバイル版のレイアウトに自動で切り替わる、いわゆるレスポンシブルデザインになりました。

結構新機能が盛りだくさん。そのうちノートブックの枠を超えてIDEとして使えるようになったりしそう
まぁiPad環境では多分、6番のCodeMirrorアップグレード関連でiPad環境でうまく動かなくなったんだと思う。たぶん

Discussion