そういえばシステムエンジニアだった

ぼけーっと会社員やってますが、そういえばSEだったことを思い出し、'てくにかる' とか 'えんじにあ' っぽいことを学び直すブログ

Pythonによる機械学習入門(1)Pythonのインストール

『データサイエンティスト養成読本 機械学習入門編』

第2部 特集2「Pythonによる機械学習入門」をGW中にやってみる

Pythonってパイソンでいいんですよね?

ゴールデンウィークで時間もあるので、1年前に買った本にしたがって機械学習やってみます。予想どおりPythonのインストールだけで手こずりました。

試行錯誤が全部書いてあるので、さっさと環境作りたい方は最後のまとめ手順だけ読んで下さい。

著者の方は素人はこんなところでつまづくんだと笑ってやって下さい。

 

使用するPC

  • MacBook Pro Retina 13-inch 2012
  • プロセッサ 2.5GHz Intel Core i5
  • メモリ 8GB 大丈夫かぁ?
  • フラッシュストレージ 251GB 空き領域 61.93GB で何とかなるか...

 

本にはLinuxMacへのインストールが載ってました

 

pyenvのインストール

司令1:HomeBrewをインストール

Homebrew — OS X 用パッケージマネージャー

にある通りターミナルに

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

を貼り付けてみる。

※ターミナルがどこかを忘れてしまう人なので

アプリケーション>ユーティリティ>ターミナル.app

をDockに追加しておきました。

 

とりあえずターミナル上で大量に文字が流れていく。。。

と、以下のところで

Press RETURN to continue or any other key to abort

 のところで止まった。ともかくエンターキーを押す。

 

==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/. /usr/local/bin /usr/local/include /usr/local/lib /usr/local/lib/pkgconfig /usr/local/share /usr/local/share/man

Password:

 何?Passwordって? ライセンスでも必要なの?と若干パニクる

だがしかし、Macにログインするときのパスワードを入力すると、何事もなかったかのように処理継続。無事終わったらしい。

 

$ brew doctor

を実行してみるといろいろワーニングが出るが、

If everything you use Homebrew for is

working fine: please don't worry and just ignore them. Thanks!

とのことなので、気にしないことにする。

 

本に戻って

司令2:pyenvのインストール
$ brew install pyenv

を実行。

無事エラーなくできたらしい。

 

司令3:シェルの設定ファイル

.bash_profileを編集する

え?初耳です。

使っているシェルに合わせて、.bash_profileや.zshenvなどを編集して次の行を追加するそうです。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

呪文が並ぶ。えヴぁられても困るし。

スキップして次へ(後々これが問題になるのだが)

動作確認のためターミナルから次のように入力します。

$ pyenv version

 次のように出力されれば正常に動いています。

system (set by /home/hoge/.pyenv/version)

こちらの環境では.bash_profileをいじらなくても以下のように出力されたので良しとします。 (だからこれがダメだったんですが)

system (set by /Users/hoge/.pyenv/version)

 

ちなみに.bash_profileはホームディレクトリにあるそうで、私の環境にはなかったです。

ターミナルの設定ファイルを作る[.bash_profile] | joppot

 

Pythonのインストール

インストール可能なバージョンは以下のコマンドで確認できるそうです。 

> pyenv install --list

3.4.3以降にこれだけのバージョンがあります。 

  •   3.4.3
  •   3.4.4
  •   3.5.0
  •   3.5-dev
  •   3.5.1
  •   3.6-dev

本では最新バージョンが3.4.3でした。

業務システムなら最新版には手を出すなですが、趣味だし最新の3.5.1でいってみましょう。(devは開発中だよね)

3.5.1の日本語ドキュメントもあるようです。

概要 — Python 3.5.1 ドキュメント

 

以下のコマンドでインストールです。

$ pyenv install 3.5.1

おやおや。なんだかエラーが出ているようです。

以下ターミナル上の出力内容

Installing Python-3.5.1...

 

BUILD FAILED (OS X 10.11.3 using python-build 20160130)

 

Inspect or clean up the working tree at /var/folders/tb/m1nd4xs16cb1xyvxd_56xl0r0000gn/T/python-build.20160503143931.11821

Results logged to /var/folders/tb/m1nd4xs16cb1xyvxd_56xl0r0000gn/T/python-build.20160503143931.11821.log

 

ログファイルを開いてerrで検索すると

/private/var/folders/tb/m1nd4xs16cb1xyvxd_56xl0r0000gn/T/python-build.20160503143931.11821/Python-3.5.1/Modules/_lzmamodule.c:19:10: fatal error: 'lzma.h' file not found
#include 
         ^
1 error generated.

(略)

Python build finished successfully!
The necessary bits to build these optional modules were not found:
_dbm                  _gdbm                 _sqlite3           
nis                   ossaudiodev           spwd               
zlib                                                           
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


Failed to build these modules:
_lzma                 _tkinter                    

(略)

Traceback (most recent call last):
  File "/private/var/folders/tb/m1nd4xs16cb1xyvxd_56xl0r0000gn/T/python-build.20160503143931.11821/Python-3.5.1/Lib/runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "/private/var/folders/tb/m1nd4xs16cb1xyvxd_56xl0r0000gn/T/python-build.20160503143931.11821/Python-3.5.1/Lib/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/private/var/folders/tb/m1nd4xs16cb1xyvxd_56xl0r0000gn/T/python-build.20160503143931.11821/Python-3.5.1/Lib/ensurepip/__main__.py", line 4, in 
    ensurepip._main()
  File "/private/var/folders/tb/m1nd4xs16cb1xyvxd_56xl0r0000gn/T/python-build.20160503143931.11821/Python-3.5.1/Lib/ensurepip/__init__.py", line 209, in _main
    default_pip=args.default_pip,
  File "/private/var/folders/tb/m1nd4xs16cb1xyvxd_56xl0r0000gn/T/python-build.20160503143931.11821/Python-3.5.1/Lib/ensurepip/__init__.py", line 116, in bootstrap
    _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/tb/m1nd4xs16cb1xyvxd_56xl0r0000gn/T/python-build.20160503143931.11821/Python-3.5.1/Lib/ensurepip/__init__.py", line 40, in _run_pip
    import pip
zipimport.ZipImportError: can't decompress data; zlib not available

うーん。Python build finished successfully! とあるので、一応成功している?

zlibが無い?

一応以下のコマンドを打ってみる

$ pyenv global 3.5.1
pyenv: version `3.5.1' not installed

やっぱり失敗してますか。

なのに強行突破。

$ pyenv rehash
$ python --version
Python 2.7.10

いやダメですね。

Python zlib mac でいろいろ探してみたところ、やはりzlibのインストールが必要らしい。

[FAQ]PythonのDistributeのインストールに失敗する - 合同会社フィールドワークス

Macでpython3の環境構築6---Matplotlibのインストール3--- - ぴろの狂人日記

 

簡単なのは一番最初HomeBrewをインストールするときに検索したページ

MacにHomebrewをインストールする - Qiita

にしたがってターミナルで

$ xcode-select --install

を実行。ダイアログで「インストール」を選んですすめる。

そしてもう一度 

$ pyenv install 3.5.1

うまくいきますように。 

Downloading Python-3.5.1.tgz...
-> https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
Installing Python-3.5.1...
Installed Python-3.5.1 to /Users/hoge/.pyenv/versions/3.5.1

あっさり4行のメッセージで完了

$ pyenv global 3.5.1
$ pyenv rehash
$ python --version
Python 2.7.10

ん?バージョンが変わらないぞ。
ちゃんと以下のフォルダも存在してbinやlibもあるのに。

/Users/hoge/.pyenv/versions/3.5.1

 

さっき無視した.bash_profileを作ってみる。

$ touch .bash_profile
$ vi .bash_profile

何年ぶりのviエディタだろう。なんとか指が動いた。

<<.bash_profileの中身>>
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

これでターミナルを再起動すると

$ python --version
Python 3.5.1

やったー!! やっとPython環境Getだぜ! ここまで3時間半... まあ何事も経験。

 

本に戻って以下のコマンドを実行

> pip install numpy
Collecting numpy
  Downloading numpy-1.11.0-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.8MB)
    100% |████████████████████████████████| 3.8MB 129kB/s 
Installing collected packages: numpy
Successfully installed numpy-1.11.0
You are using pip version 7.1.2, however version 8.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

なんかおすすめされたので、素直にpipをアップグレードします。

$ pip install --upgrade pip

続けて

$ pip install scipy
$ pip install matplotlib
$ pip install scikit-learn

こちらは難なく完了。今日はPythonのインストールで力尽きました。

 

正しい手順を整理しておきます。

MacPythonをインストールする手順

1:HomeBrewをインストール

ターミナルで以下を実行

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ xcode-select --install
2:pyenvのインストール
$ brew install pyenv

.bash_profileを作成

$ touch .bash_profile
<<.bash_profileの中身>>
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

ターミナルを開き直す

$ pyenv version
system (set by /Users/hoge/.pyenv/version)
 3.Pythonのインストール
$ pyenv install 3.5.1
$ pyenv global 3.5.1
$ pyenv rehash
$ python --version
Python 3.5.1
4.各種パッケージのインストール
$ pip install numpy
$ pip install scipy
$ pip install matplotlib
$ pip install scikit-learn

 

以上。

コマンドを叩いてデータと戯れるのは明日以降で。