jupyter notebookで、なぜかimportが通らない問題

# はじめに
普段は Sublime Text でコーディングして、コマンドプロンプトから直接 python のスクリプトを実行しているのですが、たまたま jupyter notebook で教材的なものを作ってくれといわれてですね。OpenCV の講座だったので、とりあえず

```python
In[1]: import cv2
```

ってやるじゃないですか。

```
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-8-d6821ef46d9e> in <module>()
----> 1 import cv2

ModuleNotFoundError: No module named 'cv2'
```

いやいやいや。俺普段 OpenCV 使ってるんですけど。
というわけで、なぜか import が通らない時に、確認・対処する方法をまとめておこうと思います。

# モジュールのパスを調べる
パス確認するってただそれだけの話なんですけど、pprintっていう便利なライブラリがあるようなのでご紹介。
pprintはpretty-printの略らしいです。要はいい感じにprintしてくれます。笑

```python
import sys
import pprint
pprint.pprint(sys.path)
```
```
['',
 'C:\\Users\\hoge\\Anaconda3\\python36.zip',
 'C:\\Users\\hoge\\Anaconda3\\DLLs',
 'C:\\Users\\hoge\\Anaconda3\\lib',
 'C:\\Users\\hoge\\Anaconda3',
 'C:\\Users\\hoge\\AppData\\Roaming\\Python\\Python36\\site-packages',
 'C:\\Users\\hoge\\Anaconda3\\lib\\site-packages',
 'C:\\Users\\hoge\\Anaconda3\\lib\\site-packages\\Sphinx-1.5.6-py3.6.egg',
 'C:\\Users\\hoge\\Anaconda3\\lib\\site-packages\\win32',
 'C:\\Users\\hoge\\Anaconda3\\lib\\site-packages\\win32\\lib',
 'C:\\Users\\hoge\\Anaconda3\\lib\\site-packages\\Pythonwin',
 'C:\\Users\\hoge\\Anaconda3\\lib\\site-packages\\setuptools-27.2.0-py3.6.egg',
 'C:\\Users\\hoge\\Anaconda3\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\hoge\\.ipython']
```

リストが要素ごとに改行されてprintされました。見やすい。

別途 IPython を起動(こちらでは OpenCV のインポートができる)し、同様のことをしてみると

```
['',
 'C:\\Anaconda2\\Scripts',
 'C:\\Anaconda2\\python27.zip',
 'C:\\Anaconda2\\DLLs',
 'C:\\Anaconda2\\lib',
 'C:\\Anaconda2\\lib\\plat-win',
 'C:\\Anaconda2\\lib\\lib-tk',
 'C:\\Anaconda2',
 'C:\\Users\\hoge\\AppData\\Roaming\\Python\\Python27\\site-packages',
 'c:\\anaconda2\\lib\\site-packages\\sphinx-1.3.5-py2.7.egg',
 'c:\\anaconda2\\lib\\site-packages\\setuptools-20.3-py2.7.egg',
 'C:\\Anaconda2\\lib\\site-packages',
 'C:\\Anaconda2\\lib\\site-packages\\win32',
 'C:\\Anaconda2\\lib\\site-packages\\win32\\lib',
 'C:\\Anaconda2\\lib\\site-packages\\Pythonwin',
 'C:\\Anaconda2\\lib\\site-packages\\wx-3.0-msw',
 'C:\\Anaconda2\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\hoge\\.ipython']
```

え、きみ Anaconda2 から OpenCV 起動してたの？
……

というわけでどうやら Anaconda3 からは OpenCV が見れないらしいことがわかりました。
それらしきディレクトリを求めて `C:\\Anaconda2\\lib\\site-packages` を探すと、確かに`opencv-python`のパッケージらしきものが入っていることがわかります。

※ 追記 2019.01.19
久しぶりにこの記事を見返していて、「もしかしたらIPython自体が当時Python2だったのでは？」と思いました(現在はPython3に移行しているので真偽は定かでないのですが……)。
コンソール上で`python hoge.py`などと入力する際のパスと、IPythonを起動する際のパスは別物ですからね。そのあたりを確認してみるのも有効かもしれません。

# Anaconda3 に OpenCV をインストールする
Anaconda Navigator を開きます。
左側のタブで Environments を開き、Search Packages で OpenCV を検索してみると確かに見つかりません。
root の右にある右向き三角から、 Open Terminal を選択。ターミナルが開きます。
ここで

```
pip install opencv-python
```

でめでたしでした。

```
Successfully installed opencv-python-3.4.3.18
```

どもども。`import cv2`も通るようになりました。

# 参考
- パスを調べましょうね～って話
    - [PythonでOpenCVを使おうとして ImportError: No module named cv って言われたら - はてなブログ](http://ser1zw.hatenablog.com/entry/2012/10/28/085233)

- pprintについて
    - [Pythonでimportの対象ディレクトリのパスを確認・追加（sys.pathなど） - note.nkmk.me](https://note.nkmk.me/python-import-module-search-path/)
    - [Pythonのpprintの使い方（リストや辞書を整形して出力） - note.nkmk.me](https://note.nkmk.me/python-pprint-pretty-print/)

- Anacondaにパッケージをインストール
    - [OpenCV3.4とPython3.6をAnacondaでWindows10へインストール - Qiita](https://qiita.com/FukuharaYohei/items/5d49938ffd33d198f0c0)
        - 本記事とはちょっと違った方法でインストールしてますが、当時 `pip install opencv-python` が使えなかったとかなのかなあ。
        - 画面のスクショ付きで解説してるのでわかりやすいです。僕の説明でよくわからなければこちらをみるとよいかと思います(投げやり)。