こんにちは、エンジニアのオオバです。

最近よく話題にあがる機械学習について多少は知識として入れとかんといかんかなと思い、重い腰をあげて以下の書籍を文教堂で購入しました。

Pythonによるスクレイピング&機械学習

サンプルコードがPython3系でぼくのMacには2系しかインストールされていなかったため、この際pyenvを導入してバージョン管理してから始めようかなって思った矢先の落とし穴の共有です。

pyenv自体はHomebrewでインストールし、ここまでは問題なく進みました。

brew install pyenv  

以下のコマンドでPython3.6.3をインストールします。

pyenv install 3.6.3  

すると以下のようなエラーが発生しました。

Downloading Python-3.6.3.tar.xz...  
-> https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz  
Installing Python-3.6.3...  

BUILD FAILED (OS X 10.12.6 using python-build 20160602)  

Inspect or clean up the working tree at /var/folders/p4/bhbpf2g113lg36gxmv90rrv4rjf1fs/T/python-build.20171021174552.41094  
Results logged to /var/folders/p4/bhbpf2g113lg36gxmv90rrv4rjf1fs/T/python-build.20171021174552.41094.log  

Last 10 log lines:  
copying build/lib.macosx-10.12-x86_64-3.6/__pycache__/_sysconfigdata_m_darwin_darwin.cpython-36.opt-1.pyc -> /Users/a12176/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/__pycache__  
dyld: lazy symbol binding failed: Symbol not found: _utimensat  
  Referenced from: /private/var/folders/p4/bhbpf2g113lg36gxmv90rrv4rjf1fs/T/python-build.20171021174552.41094/Python-3.6.3/./python.exe  
  Expected in: /usr/lib/libSystem.B.dylib  

dyld: Symbol not found: _utimensat  
  Referenced from: /private/var/folders/p4/bhbpf2g113lg36gxmv90rrv4rjf1fs/T/python-build.20171021174552.41094/Python-3.6.3/./python.exe  
  Expected in: /usr/lib/libSystem.B.dylib  

make: *** [sharedinstall] Abort trap: 6  

同じような問題を解決した記事を参考に以下のコマンドを実行してみます。

MacでPython 3.5.0インストールに失敗したら - Qiita

xcode-select --install  

再度Python 3.6.3のインストールすると成功しました。

pyenv install 3.6.3  

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

pyenvの初期設定

このままではpyenv経由のPythonを使用できません。
which pythonと実行すると、デフォルトでMacインストールされているPython /usr/bin/pythonが指定されていることが分かります。

pyenv経由で使用するPythonのバージョンを設定します。

pyenv global 3.6.3  

以下のコマンドを実行した後、which pythonしてみます。

eval "$(pyenv init -)"  

すると、/Users/ユーザーネーム/.pyenv/shims/pythonこのようにpyenv経由のpythonが指定されていることがわかります。

ちなみに、このpyenv initですが、このまま実行してしまうと以下のようにしてほしいという依頼が表示されます。

## Load pyenv automatically by appending
<GoogleAdsense type='1' />

## the following to ~/.bash_profile:

eval "$(pyenv init -)"  

上記の指示に従い.bash_profileまたは.bashrcに以下の記述をすることで起動時に自動的にpyenv経由のPythonを使用することが可能になります。

eval "$(pyenv init -)"  

まとめ

xcode-select --installこのコマンドは、コマンドラインツールの自動インストールダイアログをリクエストするので、開発ツールインストールにおけるコマンドライン系のエラーがでた場合には一度試してみるのが良いかもしれません。

xcode-selectによるデベロッパディレクトリ管理 - Qiita

最後に

これでやっと冒頭の機械学習の本が始められそうです。

オススメ記事
検証環境