とあるきっかけでZeppelinというウェブベースのノートブックサービスの存在を知りました。恥ずかしながら、こういった「ノートブックの中でコードが実行できる」というものを全く知らなかったので、Pythonの学習記録を残すにはよいのではないかと興味を持ちました。
少し調べてみると、ZeppelinでもPython連携は可能みたいですが、よりPythonに近いものとして、Jupyterというものがある、ということで試しに導入してみました。
環境
Windows10(64bit)
Anaconda3 4.3.1(これを入れると、jupyter_core 4.3.0がインストールされる)
Anaconda導入
公式によると、Jupyterは単体でのインストールではなく、Anacondaの一部としてインストールするのが推奨のようです。
またまた不勉強ですが、Anacondaも知らなかったので調べたところ、Pythonのディストリビューションの1つで、主に数値計算、データサイエンス系のライブラリが充実しているとのこと。またCondaというパッケージ管理のソフトを含み、これを使って2.xと3.xの使い分けや仮想環境構築(virtualenv/pyenv)もカバーできるようです。
Anacondaのダウンロードはこちらから。
Windows10(64bit)環境なので、対応するインストーラを落として実行。
ちなみにもともと入っていたPython2.7,3.5はいったんアンインストールしようかと思いましたが、StackOverflowに残してよいとあったので、とりあえず残しました。
基本的にデフォルトの設定を受け入れましたが、ユーザはAll Usersにしました。
また、必要容量1.8GBには少し驚きました。
Juputer起動
インストール完了後、コマンドプロンプトにて
jupyter notebook
と打てばサーバがポート8888で起動し、勝手にブラウザで立ち上がります。
ポートを変更するには、jupyter notebook --port 9999
, ブラウザの立ち上げをしないのは、jupyter notebook --no-browser
です。
実行したフォルダのファイル一覧が表示されます。新しくnotebookを作るには、New→Python3を選択(この時点ではこれしか関連付けされていないので)。
出てきたセルに適当なコードを下記、Shift + Enterすると実行されます。インデントや色分けもやってくれます。
別バージョンのインストール
【参考】
https://jupyter.readthedocs.io/en/latest/install-kernel.html
各インタープリタはkernelと呼ばれる。
2.7をインストールするには、conda create -n py27 python=2.7.12 ipykernel
これで、C:\ProgramData\Anaconda3\envs\py27にインストールされる。
これは、JupyterというよりAnacondaの世界の話(JupyterはAnacondaの環境を使っているだけ)なので、Jupyter関係なく、Python2.7環境を呼び出せる。
これだけではJupyterとは関連づかないので、以下のように関連付ける。
>activate py27
(py27) >python -m ipykernel install --user
これでもう一度起動すると、python2も選べる。ここで表示される名前py27となるのかと思ったらPython 2になる。環境が作られるフォルダの名前が拾われるのかな?
%APPDATA%\jupyter\kernels\python2
呼び出したpy27環境の停止はdeactivate py27
他のコマンドの使用
python以外のことをさせたいなら、セルに%%cmdと入れれば、windowsのコマンドプロンプトのコマンドを使えます。うまくやれば、色々統合できそう。
(2019/02/10追記)デフォルトディレクトリの変更
色々な方が書いていますが。少し追加が必要だったのでメモ。
anacondaをインストールすると同時にインストールされるAnaconda Terminalというアプリケーションを実行し、以下のコマンドで設定ファイルを生成、それを編集する。
(base) C:\Users\ikedak2>jupyter notebook --generate-config
Overwrite C:\Users\ikedak2\.jupyter\jupyter_notebook_config.py with default config? [y/N]y
Writing default config to: C:\Users\ikedak2\.jupyter\jupyter_notebook_config.py
c.NotebookApp.notebook_dir
というパラメータを書き換える。Windowsの場合は円マークを2回続けてエスケープする必要がある点に注意。
## The directory to use for notebooks and kernels.
c.NotebookApp.notebook_dir = 'C:\\Users\\ikedak2\\Jupyter_Memo'
これだけでは変更されないので、Windowsのアプリ一覧から、Jupyter Notebookを右クリックし、ファイルの場所を開くとする。そこにJupyter Notebookのショートカットがあるので、そのプロパティを開く。自分の場合は以下。
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)
- 「リンク先」の中で、最後に%USERPROFILE%という記述がある場合はそれを削除する。
- 作業フォルダを指定したディレクトリに合わせる
上記2点を修正すると、無事想定通りに起動しました。
(2020/09/20追記)補完の追加
相当昔の記事なので、全体的にリバイズが必要な気はしますが、いったん追記します。
Jupyter NotebookはデフォルトではIDEのような入力補完が行われません。以下の手順で有効化できます。
まずAnacondaインストール時に一緒にインストールされる、Anaconda Promptを起動し、そこで以下を実行します。
pip install jupyter-contrib-nbextensions
pip install jupyter-nbextensions-configurator
jupyter contrib nbextension install
jupyter nbextensions_configurator enable
Jupyter Notebookを起動しなおすと、Nbextensionsというタブが追加されているので、そこでHinterlandをチェックします。
これでコード補完がされるようになります。
まとめ
これでJupyterを起動し、ノートブックごとにPython2.7,3.6を使い分けられるようになりました。
Jupyter, anaconda, ipython, condaの関係性が難しい…。
あと公式のドキュメントがものすごくたどりづらい気がする。
- Anaconda: pythonのディストリビューション(jupyterを含む)
- conda: anacondaのパッケージ管理ソフト
- ipython: pythonのシェルを拡張したもの(つまりシェル)。補完などの機能がデフォルトのシェルよりも優秀らしい。ipython notebookという、ipythonをブラウザから実行(プラスメモ)の機能をもっていたが、それが分離してjupyterとなった。
- jupyter: webベースのノートブック。バックエンドとしてipythonを使用。
すなわち、Jupyterからpythonを使う時のシェル(インターフェース)がipythonで、その全体がanacondaというディストリビューションに含まれている、という理解。
つまり、JupyterはPythonに近い、というよりほぼpythonそのものなipythonの派生だったわけです。きっかけになったzeppelinもそのうち挑戦しようと思います。