techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

Mac(El Capitan)にTensorFlowを入れようとしてハマった残念な私

機械学習に入る前の備忘録and私の残念な思い出話。

発端

少しずつ機械学習の勉強を始めていた私ですが、今週末は出張になってしまいました。
自宅のデスクトップ環境だけでしか作業できないのは不便...
よっしゃ!この機会に調子悪いMacをクリーンしてEl Capitanもいれちゃうぞ!機械学習の環境も構築や!
と先週末から環境構築を始めました。
まさか、この後少し面倒なことになるとも知らずに...

残念な思い出

ここからは残念な思い出をつらつらと書いていきます。

まずはApp StoreからEl Capitanをインストール。
データのバックアップを済ませて、いざクリーンインストール開始!
家のネット回線が低速すぎてクリーンインストール完了まで1日ぐらいかかりました。
(ISPが悪いのでしょうか...)

クリーンインストールも終わったので、公式に従ってTensorFlowを入れます。
Download and Setup

あれ?なんかエラーが出てるぞ?

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl
The directory '/Users/hayato/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/hayato/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting tensorflow==0.8.0 from https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl
  Downloading https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl (19.3MB)
    100% |████████████████████████████████| 19.3MB 41kB/s 
Requirement already up-to-date: six>=1.10.0 in /Library/Python/2.7/site-packages/six-1.10.0-py2.7.egg (from tensorflow==0.8.0)
Collecting protobuf==3.0.0b2 (from tensorflow==0.8.0)
  Downloading protobuf-3.0.0b2-py2.py3-none-any.whl (326kB)
    100% |████████████████████████████████| 327kB 221kB/s 
Collecting wheel (from tensorflow==0.8.0)
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
    100% |████████████████████████████████| 71kB 856kB/s 
Collecting numpy>=1.10.1 (from tensorflow==0.8.0)
  Downloading numpy-1.11.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.9MB)
    100% |████████████████████████████████| 3.9MB 194kB/s 
Collecting setuptools (from protobuf==3.0.0b2->tensorflow==0.8.0)
  Downloading setuptools-23.0.0-py2.py3-none-any.whl (435kB)
    100% |████████████████████████████████| 440kB 896kB/s 
Installing collected packages: setuptools, protobuf, wheel, numpy, tensorflow
  Found existing installation: setuptools 1.1.6
    Uninstalling setuptools-1.1.6:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/commands/install.py", line 317, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_set.py", line 736, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_install.py", line 742, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
    copytree(src, real_dst, symlinks=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
    raise Error, errors
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', "[Errno 1] Operation not permitted: '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', "[Errno 1] Operation not permitted: '/tmp/pip-HW7wDr-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'")]

アンインストールに失敗している...?何が起こっているんだ...。
クリーンインストールする前はできていたはずだが...。
この後しばらく原因がわからず右往左往していました。

もしかして実行環境が変わってしまった?

$ python -V
Python 2.7.10

!!!!!!
そういえば前はbrewで最新版入れてたことに気づく
下記を参考にbrewを導入
qiita.com

$ echo 'export PATH=/usr/local/bin:$PATH' >> .bash_profile
$ source .bash_profile
$ brew update
$ brew install python 
$ pip install --upgrade pip setuptools
$ brew linkapps python

その後、再度公式に沿ってTensorFlowをいれてみると、あっけなく導入できてしまいました。

原因

調べてみたところ、Yosemiteまでだと問題なく公式の言うとおりにしていけば導入できるとのこと。
原因はEl Capitanから導入されたシステム整合性保護(System Integrity Protection (SIP)やrootlessなど)
と呼ばれる新しいセキュリティ技術のためだそうです。

公式 support.apple.com

まとめられている方がいました rcmdnk.github.io

お恥ずかしながら、私はアップデート内容について何一つ理解していないまま、
El Capitanにアップデートしてしまい、今回のような事態となってしまいました。

アップデートの際は、アップデート内容についてしっかり確認しようと思うきっかけとなりました。

brewにも問題が出たりするそうですので、皆様もお気をつけください。