atom使いのためのdockerとHydrogenによるお手軽python環境構築


atomを使いたい

dockerを使うとお手軽にjupyterを使えるpython環境が手に入ります。ただjupyterをそのまま使いたくないという謎のこだわりがある。
pythonを書くときの環境はjupyter notebookが便利。最近だとjupyterLabなんかも拡張機能とかもあって楽しいらしい。(参考:https://qiita.com/canonrock16/items/d166c93087a4aafd2db4)

しかし、私はatomを使いたい。特別理由はないがatomを使いたい。

pythonに関してはatomにHydrogenというパッケージを導入すればjupyterライクに出力を得られる。ただ、SSHでリモートマシンに接続したり、dockerコンテナ上のカーネルに接続する場合多少の設定が必要になる。
今回は、いろいろあって環境がぐちゃぐちゃになったので、docker上にpython環境を用意しatom上でHydrogenを使う環境を整えたのでその流れをメモに残します。

dockerコンテナの起動

docker imageを自分で用意する時間がなかったため、jupyter環境が最初から構築してあるimageを使わせてもらった。docker hubにいろいろあるが、自分はjupyter/scipy-notebookを使わせてもらった。
詳細は省かせていただきます。
1.docker imageをpull

docker pull jupyter/scipy-notebook

2.docker imageをrun

docker run -p 8888:8888 -v ~/hoge:/home/jovyan/work jupyter/scipy-notebook start-notebook.sh --NotebookApp.token='yourtoken'

オプションとして、

  • -p: コンテナのポートをホスト側に公開してポートフォワーディング。例ではローカルの8888とコンテナの8888をポートフォワーディングしている。
  • -v: ボリュームをマウント。フォルダの同期のため。例ではローカルのhogeとコンテナ内のhome/jovyan/workとをマウントしています。
  • start-notobook.sh: jupyterのコマンドを使用するために必要なオプション.このあとじゃないと下記のNotebookAppというオプションが効かない。
  • NotebookApp.token="yourtoken": jupyter側のコマンドで、tokenを指定

tokenは指定しないと毎回変わるので指定することをオススメ。
ここで、

Executing the command: jupyter notebook --NotebookApp.token=yourtoken
[I 14:19:25.923 NotebookApp] Writing notebook server cookie secret to /home/jovyan/.local/share/jupyter/runtime/notebook_cookie_secret
[I 14:19:27.362 NotebookApp] JupyterLab extension loaded from /opt/conda/lib/python3.7/site-packages/jupyterlab
[I 14:19:27.362 NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 14:19:27.365 NotebookApp] Serving notebooks from local directory: /home/jovyan
[I 14:19:27.366 NotebookApp] The Jupyter Notebook is running at:
[I 14:19:27.367 NotebookApp] http://(***):8888/?token=…
[I 14:19:27.367 NotebookApp]
Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

とでてきてdockerコンテナ上にjupyter kernelが起動できた。

ここまでできたら、Hydrogenへの設定へ。

Hydrogenの準備

調べればたくさん丁寧に説明してくれてる記事があるので、Hydrogenのインストール等は省略する。(こことか)

atomのpacageからHydrogenの設定画面へ行き、Kernel Gatewayというところに、こんな感じで記入。


nameは自分の好きなものを、baseUrlはdockerを起動したときにでてきたurlをコピペ、tokenは自分で設定したtokenを記入。
詳細はここ参照。

Hydrogenからリモートカーネルへ接続

  1. atomの画面からコマンドパレットを開き,Hydrogen:Connect To Remote Kernelを選択。 2.remote kernelが見つかれば次のように出てくるので、使いたいカーネルを選択。


3.セッションを選択。

ここまできたら、あとは通常のHydrogenと同じように使えるはず。

まとめ

Hydrogenを使えば、atomのエディタ機能を使いながらjupyterのインタラクティブな機能をふんだんに使える。jupyter用のショートカットを覚える必要もない。docker使えば環境設定の必要もほぼいらない。python使う人はatomとHydrogen使いましょ。
(jupyter labとかは進化が目まぐるしいので、ちょっとさわってもいいかな・・・)

ssh接続でリモートマシン上のカーネルを使いたいときも同じようにできると思います。

参考

Jupyterをブラウザで使うのをやめてAtomのHydrogenに移行した話
JupyterのDockerイメージまとめ
Hydrogen
jupyter docker stacks