概要

Jupyter Notebook (*.ipynb)をダブルクリックで開くためのアプリケーションJupyter Launcher.appを、MacのAutomatorを使って作成します。buq様のオリジナルのアイデア (ipython notebook のファイルをダブルクリックで開く @ OS X)をもとに、個人的に追加したい機能のためにいくつかの変更を行います。ついでにPythonで書き直しています。

dock_screenshot.png

追加機能と変更点

    • アプリ自体をクリックで実行したときはJupyterのツリー画面を表示する

 

    Jupyter Notebookのホームを/から~/に変更する (上記における利便性と安全性のため)

細かな改善点

    • Jupyterが確実に起動するまでウェイトする (while文の部分。特にMac起動直後では定数時間のウェイトだと間に合わない場合もあるため)

 

    そのため、Jupyterの起動確認はnetstatではなくlsofを使用する (netstatはブラウザが起動しない限りゼロを返し続けてしまうため)

作成手順

    1. Automator.appを起動し、新規アプリケーションを選択し作成開始

 

    1. アクションからシェルスクリプトを実行を選択

 

    1. シェルは/usr/bin/pythonを選択

 

    1. 入力の引き渡し方法は引数としてを選択

 

    1. 以下のPythonスクリプトをウィンドウに入力

 

    1. Jupyter Launcher.appとして/Applicationsに保存

 

    お好みでアイコンを設定して完成
automator_screenshot.png

Pythonスクリプト

2017.01.14: スクリプトをアップデート (機能面の変更はなし)

# coding: utf-8

"""Script for the Jupyter Launcher Application."""

import os
import sys
import time
import webbrowser
from subprocess import Popen, PIPE


def listened(port):
    """Check if the spacified port is listened or not."""
    cmd = "lsof -i :{} | grep 'LISTEN'"
    proc = Popen(cmd.format(port), stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True)
    return bool(proc.communicate()[0])


def launch_jupyter(port):
    """Launch a Jupyter Notebook Server with the spacified port."""
    cmd = "bash -cl 'jupyter-notebook ~/ --port={} --no-browser &' > /dev/null 2>&1"
    proc = Popen(cmd.format(port), stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True)
    proc.communicate()


if __name__ == '__main__':
    PORT = 8888
    ipynbs = sys.argv[1:]

    if not listened(PORT):
        launch_jupyter(PORT)

    while not listened(PORT):
        time.sleep(0.5)

    if ipynbs:
        for ipynb in ipynbs:
            url = 'http://localhost:{}/notebooks/{}'
            path = os.path.relpath(ipynb, os.environ['HOME'])
            webbrowser.open(url.format(PORT, path))
    else:
        url = 'http://localhost:{}/tree'
        webbrowser.open(url.format(PORT))

References

    • ipython notebook のファイルをダブルクリックで開く @ OS X – buq’s blog

 

    • ipython notebook のファイルをダブルクリックで開く:訂正記事 – buq’s blog

 

    Macで使っているPortを調べる方法 – Qiita
bannerAds