Python３でOpencv4をインストールしたのにimportできない時の最後の砦

後輩がPython3とOpenCV4をインストールしたはずなのにimportできないとのことだったので、その原因と対処法の備忘録

#1 導入環境
今流行りのAnacondaなどをしようせず、そのままのPythonでのOpenCVの実装を試みたそうです。
・MacOS Mojabe ver.10.14.4
・Python 3
・OpenCV 4 

#2導入方法
これに関しては今回の本題ではないので触り程度を紹介。
後輩はbrewでインストールしたとのことだったのでその手順を書いておく。

**brew（web上のパッケージマネジャ）をPCにインストール**

```terminal
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
**Python3のインストール**

```terminal
$ brew install Python3
```

**Opencv3のインストール**

```terminal
$brew install opencv4
```
これで導入は完了


#3なぜ動かないのか
そもそも、なぜインストールが完了しているはずなのに、importができないのか。
考えうる原因に以下の点があげられる。

・そもそもインストールできてない
・versionが最新じゃない
・import文が間違えている
・同じバージョンのPythonまたはOpenCVがPC内に混在している

これらが起こる原因の詳細と確認方法、及び対処法をまとめていく

#4原因と対処法（基礎編）

###そもそもインストールできていない
原因：ターミナルがエラー吐いているのに気づいてない、コマンドがおかしい
対処法：下記を実行していこう

**Python3が正しくインストールされているか確認**

```terminal
$ Python3 -V
```
下記のように出てきたらOK
```HogeHogenoMacBook-Air:~ PomePome$ Python3 -V
Python 3.7.3```

こんなふうにで出てきたらx
```-bash: Python3: command not found```

・入力するコマンドが正しくタイプできているか（スペルミス,空白ミスチェック）
・コマンドが通っているか(-bashが出てたらミスしているってこと)
などを確認しながら**2**の導入を行ってほしい


###versionが最新じゃない
原因：とくにopencvの方で起こるエラー、普通インストールしたら最新ver.が入ると思うけど旧ver.が入ることがあるらしい、（デバック側のエラーなので起きた以上は対処するしかない）
対処法：バーションを最新にする

**Python3のversionアップデート**

```
$ brew upgrade Python3
```

すると、brewのアップデートが残っていれば自動で行われ、その後にPythonのアップデートを行ってくれる
アップデートがない（最新のver.だった）場合
```Error: python3 バージョン名 already installed```と言われるだけなので無視して良い。

**OpenCV４のversionアップデート**

```
$ brew upgrade opencv
```

同様に、brewのアップデート→opencvのアップデートを自動で行ってくれる、最新だった場合のエラーも上記通りなので割愛。

###import文が間違っている
原因：import文が間違っている
対処法：import文が間違っている

**間違っていないimport文**

```python
import cv2
```

と、少しふざけたけどこういうミスも全然ありうるので、きちんと確認してほしい。


ここまでで簡単なエラーは紹介できたので一度プログラムを動かしてみてほしい。できなかった場合、最後の砦のさらに最後に進もう。

#5原因と対処法（最後の砦）

###python３を複数個インストールしている、ないしpathが通せていない（リンクづけできていない）
原因：brewでインストールするのとは別で、他のパッケージマネジャ（公式webサイト、pip、anacondaなど）からPythonをインストールしていた。
対処法:複数個存在しているPython、OpenCVを全て削除し一つに絞ってインストールし直す

PythonでOpenCVを利用する際、これら2つのリンクづけが必要である（「Python」というテーブルに、「Opencv」という本がどこにしまってあるかを書き込んであげるイメージ）
昔は、手動で行っていた作業だが今は**同じパッケージサイトを使えば自動で行ってくれる。**逆に言えば違うパッケージサイトを使うと行ってくれないわけだ。


**Pythonの位置を確認する**

```terminal
which Python3
```
Pythonがどこにあるかを確認する。
```/usr/local/bin/Python3```
ここにあれば基本問題ない。
これが
```/ライブラリ/・・・```
とか出たら、Pythonが複数インストールされている可能性が出てくる

**自分が他にPythonを所持しているか思い出す。**
上記の**2**で示しているのはHomeBrewというパッケージマネジャを用いたPythonのインストールの方法である。これとは別でPythonをインストールしている場合は一旦全てのPythonインストールデータをアンインストールし、再度いれたいものだけをインストールし直そう。


#6アンインストール手順
下記にはいくつかのアンインストール方法を明記しておくが、ここにないものは調べれば出てくるのでそちらを調べてほしい。

##①HomebrewでインストールしたPythonのアンインストール
何もわからず、とりあえず僕に騙されインストールしてしまった迷える子羊たちはここでアンインストールしましょう。

###❶ターミナルに以下を記載してopencvをアンインストール

```terminal
$ brew uninstall opencv
```

###❷ターミナルに以下を記載してpythonをアンインストール

```terminal
$ brew uninstall --ignore-dependencies python3
```
これでアンインストールは完了。**7**に移動しましょう。

##②公式HPでインストールしたPythonのアンインストール

###"アプリケーション"フォルダにあるPythonの削除
最初に```Finder```の中の```アプリケーション```内にある```Pythonフォルダ```を削除。バージョンによっては複数個あるので、全部削除。

###"Python.framework"フォルダを全て削除
ターミナルで以下を記述する

```terminal
$ sudo rm -rf  /Library/Frameworks/Python.framework
```

###シンボリックリンクを削除
仮にアンインストールが完了したとしても、それぞれを繋いでいたリンク（紐）は残ったままになってしまい、色々と悪さするので消してしまいましょう。
ちなみに、これはちょっと面倒臭いです。

####❶ターミナルに次のコマンドを入力する。

```terminal
$ ls -l /usr/local/bin | grep Python
```
すると、ずらずらとリストが表示される。

####❷以下のコマンドをターミナルに入力する。

```terminal
$ cd
$ cd /usr/local/bin
$ open .
```
すると、また別でずらずらとリストが表示される。

一見するとわけがわからないと思いますが、❶のリストの末尾に表示されている名称と、❷のリストで表示された名称を見比べれば、同じものがあるはずです。
❷のリストからこれらを全て削除する。

###.bash_profileの中身を修正
公式のホームページからインストールすると、.bash_profileにPathを書き込み、他でインストールしたPythonより、これを優先的に参照するようになります。アンインストールするのでこれも書き直す必要がある。

####❶ターミナルに以下を記述

```terminal
$open -a Xcode ~/.bash_profile
```
するとxcodeでテキストファイルが開かれると思います。
そこに書いてある

```
# Setting PATH for Python 3.5
# The original version is saved in .bash_profile.pysave
PATH=”/Library/Frameworks/Python.framework/Versions/3.5/bin:${PATH}”
export PATH
```
この記述を削除

####❷ターミナルに以下を記述
```terminal
$ rm .bash_profile.pysave
```
えらいことに、.bash_profileが消えてしまった場合ようにバックアップまでも用意してあるので、それも削除するためのコマンド。

作業は以上です。**7**に進みましょう。

##③AnacondaでインストールしたPythonのアンインストール

要望があれば書き足します。

##④pipでインストールしたPythonのアンインストール
要望があれば書き足します。



#7終わりに
**6**までのステップが終わっていれば、綺麗にPythonがアンインストールされているはず。この状態から**2**に戻ってインストールし直してみましょう。
以上で全行程が終了です。import文が通るか試してみましょう。


筆者の後輩はこれが原因だった。
初心者にありがちだが、色々なサイトの色々な方法を試した結果、パソコンの中にそれらの残留物が残ってしまい紐が絡まってしまっているみたいにPC内が無茶苦茶になってしまっている場合がある。
**新しい方法を試す前にまずは前のものを綺麗にアンインストールする**
サボりがちだがこれは結構大切なことなので覚えておいてほしい。

#参考サイト
https://peachcle.com/uninstall-python-for-mac/