渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

PyenvでPython3.6.3インストール時のトラブル


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


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

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
# the following to ~/.bash_profile:

eval "$(pyenv init -)"

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

eval "$(pyenv init -)"

まとめ

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

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

最後に

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

環境

  • OS X 10.12.6
  • pyenv 1.1.5