Jupyterインストール

とあるきっかけでZeppelinというウェブベースのノートブックサービスの存在を知りました。恥ずかしながら、こういった「ノートブックの中でコードが実行できる」というものを全く知らなかったので、Pythonの学習記録を残すにはよいのではないかと興味を持ちました。
少し調べてみると、ZeppelinでもPython連携は可能みたいですが、よりPythonに近いものとして、Jupyterというものがある、ということで試しに導入してみました。

# 環境
Windows10(64bit)
Anaconda3 4.3.1(これを入れると、jupyter_core 4.3.0がインストールされる)

# Anaconda導入
[公式](http://jupyter.org/install.html)によると、Jupyterは単体でのインストールではなく、Anacondaの一部としてインストールするのが推奨のようです。
またまた不勉強ですが、Anacondaも知らなかったので調べたところ、Pythonのディストリビューションの1つで、主に数値計算、データサイエンス系のライブラリが充実しているとのこと。またCondaというパッケージ管理のソフトを含み、これを使って2.xと3.xの使い分けや仮想環境構築(virtualenv/pyenv)もカバーできるようです。
Anacondaのダウンロードは[こちら](https://www.continuum.io/downloads#windows)から。
Windows10(64bit)環境なので、対応するインストーラを落として実行。
ちなみにもともと入っていたPython2.7,3.5はいったんアンインストールしようかと思いましたが、[StackOverflow](http://stackoverflow.com/questions/34906338/installing-anaconda-over-existing-python-system)に残してよいとあったので、とりあえず残しました。

基本的にデフォルトの設定を受け入れましたが、ユーザはAll Usersにしました。
また、必要容量1.8GBには少し驚きました。

# Juputer起動
インストール完了後、コマンドプロンプトにて
`jupyter notebook`と打てばサーバがポート8888で起動し、勝手にブラウザで立ち上がります。
ポートを変更するには、`jupyter notebook --port 9999`, ブラウザの立ち上げをしないのは、`jupyter notebook --no-browser`です。

![20170327_013.jpg](https://qiita-image-store.s3.amazonaws.com/0/159980/1ae54b64-16ec-c2ec-a51b-537bc1089fd8.jpeg)

実行したフォルダのファイル一覧が表示されます。新しくnotebookを作るには、New→Python3を選択(この時点ではこれしか関連付けされていないので)。
出てきたセルに適当なコードを下記、Shift + Enterすると実行されます。インデントや色分けもやってくれます。

![20170327_014.jpg](https://qiita-image-store.s3.amazonaws.com/0/159980/40aea5e6-2539-c79a-5e3e-aba3f0528fcc.jpeg)

# 別バージョンのインストール
【参考】
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とは関連づかないので、以下のように関連付ける。

```shell-session
>activate py27
(py27) >python -m ipykernel install --user
```

これでもう一度起動すると、python2も選べる。ここで表示される名前py27となるのかと思ったらPython 2になる。環境が作られるフォルダの名前が拾われるのかな?
`%APPDATA%\jupyter\kernels\python2`

![20170327_015.jpg](https://qiita-image-store.s3.amazonaws.com/0/159980/2cf1fe1f-7e62-51e9-4407-50ddce5ae694.jpeg)

呼び出したpy27環境の停止は`deactivate py27`

# 他のコマンドの使用
python以外のことをさせたいなら、セルに%%cmdと入れれば、windowsのコマンドプロンプトのコマンドを使えます。うまくやれば、色々統合できそう。

![20170327_016.jpg](https://qiita-image-store.s3.amazonaws.com/0/159980/367355de-ae92-9db6-ef5c-7813a872d2b2.jpeg)

# (2019/02/10追記)デフォルトディレクトリの変更
色々な方が書いていますが。少し追加が必要だったのでメモ。
anacondaをインストールすると同時にインストールされるAnaconda Terminalというアプリケーションを実行し、以下のコマンドで設定ファイルを生成、それを編集する。

```shell-session
(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回続けてエスケープする必要がある点に注意。

```py:jupyter_notebook_config.py
## 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点を修正すると、無事想定通りに起動しました。

![image](https://qiita-image-store.s3.amazonaws.com/0/159980/7c59d39b-2e24-bf0f-c15b-0c995ebcbaab.png)

# (2020/09/20追記)補完の追加
相当昔の記事なので、全体的にリバイズが必要な気はしますが、いったん追記します。
Jupyter NotebookはデフォルトではIDEのような入力補完が行われません。以下の手順で有効化できます。
まずAnacondaインストール時に一緒にインストールされる、Anaconda Promptを起動し、そこで以下を実行します。

```shell-session
pip install jupyter-contrib-nbextensions
pip install jupyter-nbextensions-configurator
jupyter contrib nbextension install
jupyter nbextensions_configurator enable
```

Jupyter Notebookを起動しなおすと、Nbextensionsというタブが追加されているので、そこでHinterlandをチェックします。

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159980/dd48f592-07a1-798b-aeff-ecf4e66dcbba.png)

これでコード補完がされるようになります。

# まとめ
これで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もそのうち挑戦しようと思います。