Gitpod上でのJupyter環境で、バージョンを7系から6系にしたお話
前に書いた記事ではGitpodというクラウド上でVSCodeライクな環境を使えるサービスを使って、クラウド上にJupyterのターミナルを置いてお手軽iPadでJupyter環境を整えていました
しかし、Jupyter Notebookが7系アップグレードされたことで問題が発生してしまった
iPadだとShft+Enter
でのコードブロック実行後に次のコードブロックにカーソルが移動しない!
これ、いくつかのコードブロックを実行したいそき、右手小指でShift
キーを長押ししながら、薬指でEnter
、Enter
、Enter
…って連続してコードブロックを実行できていたのができなくなっています。悲しい
なので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回目の
pip uninstall -y notebook
で、7.0.2
を削除
- バージョンたち:
["7.0.2"] => []
- 2回目の
pip uninstall -y notebook
はnotebook
モジュールがないので何もせずに終わる
- バージョンたち:
[] => []
- 改めて
notebook==6.0.0
をインストールし直して実行
- バージョンたち:
[] => ["6.0.0"]
- この段階で入っているバージョンたち:
-
再起動時
0. 前回の終了時の状況で、バージョン6.0.0
が入っている状態に加え、起動時に自動でデフォルト設定の、notebook==7.0.2
が追加インストールされる- この段階で入っているバージョンたち:
["6.0.0", "7.0.2"]
- 1回目の
pip uninstall -y notebook
で、若いバージョンが削除される
- バージョンたち:
["6.0.0", "7.0.2"] => ["7.0.2"]
- 2回目の
pip uninstall -y notebook
で自動追加インストール分を削除
- バージョンたち:
["7.0.2"] => []
- 改めて
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個もの新機能があるらしい
以下ざっくり英訳まとめ
- 新しいデバッガー
- セルごとにブレイクポイントをつけてのデバッグができる
- リアルタイムコラボレーション
- コラボレーションするための拡張機能を
pip install jupiter-collaboration
でインストールすることで、リアルタイムのコード共有ができる
- コラボレーションするための拡張機能を
- コンテンツテーブル
- 右端のサイドバーにコンテンツテーブルを追加。VSCodeで
フォルダを開く
をしていろんなファイルを縦横無尽に駆け巡る、アレ
- 右端のサイドバーにコンテンツテーブルを追加。VSCodeで
- ダークテーマ
- ダークテーマの拡張機能を
pip install jupiter lab-night
で入手できる。目に優しい
- ダークテーマの拡張機能を
- 多言語対応
-
pip install jupiter lab-language-pack-fr-FR
でフランス語版を入手するデモンストレーションが公開されていた。language-packの中身を見る限り、jupyterlab-language-pack-ja-JP
で日本語版もあるようだ
-
- アクセシビリティ改善
- テキストエディタに関して、
CodeMirror 5
からCodeMirror 6
にアップグレードした恩恵を受けられます
- テキストエディタに関して、
- たくさんのJupyterLab拡張をサポートしました
-
Language Server Protcol
や、人気のあるnbgrader
、RISE
などをpip
でインストールできるようになりました
-
- クラシックのノートブックのユーザーエクスペリエンスを維持しています
- いや、まぁ、iPad + Bluetoothキーボードでがちゃがちゃやってる環境は、対象外ですよね
- モバイル版のコンパクトビューに対応
- モバイル版のレイアウトに自動で切り替わる、いわゆるレスポンシブルデザインになりました。
結構新機能が盛りだくさん。そのうちノートブックの枠を超えてIDEとして使えるようになったりしそう
まぁiPad環境では多分、6番のCodeMirror
アップグレード関連でiPad環境でうまく動かなくなったんだと思う。たぶん
Discussion