MacでBoost Pythonを使おう
今の開発環境
- Mac OS High Sierra (10.13)
- XCode 9.0.0 (High Sierraにアップグレードしたらこうなった)
- homebrew
- Eclipse oxygen (+CDT)
- (c++11か、それ以上)
- python 3.6
今回は、pythonで10000x10000行列を扱うようなコードを書きたかったということで上司に相談したらboost pythonをおすすめしてくれたので、自宅にboost pythonを入れることにしました。
色々な問題に直面
boost周り
- いろんなバージョンが散らばっていた(笑う)
python周り
- いろんなバージョンのpythonを入れまくっててあれこれ散逸していた
- デフォルトが3系だと思い込んでいたけど、実は2系だった
- 3系も3.3, 3.5, 3.6などなどあれこれ散らばってた
- そもそもpythonたちの場所を知らなかったり(>_<)
- boost-pythonでコードを書くときpythonのinclude pathが必要
クロスコンパイラ周り
- boost-pythonは、dylibでビルドしてはいけなくて、必ずクロスコンパイラを使ってsoでビルドしないといけないが、そもそもクロスコンパイラなんてどこにあることすら知らなかった
一つずつ潰していく
まずはなんとなく最新のboostとboost-python入れるところから
Macのhomebrewあると、たったの数行でboostとboost-pythonを入れることができます。
brew install boost
これやると、ビルド済みのboostがインストールされます。
普通のboostはこの状態で使えるようになっちゃいます。(なんと便利!)
そして、こんな勢いでboost-pythonも入れちゃいます。
brew install boost-python
python3系のみ使いたいときは、次のようにします。
brew install boost-python --with-python3 --without-python
python 3.6をpython3.xのデフォルトに設定しよう(pyenvでインストールしたもの)
-
ごちゃごちゃあるpythonたちのバージョンを調べよう
- pyenvで次のように調べられます
pyenv versions
そうすると、次のような画面が出ます。
system
* 3.5.0 (set by /Users/xxx/.python-version)
3.6-dev
3.6.3
anaconda-2.1.0
anaconda2-2.4.1
バージョンを書き換えるには、次のようにします。
/Users/MIN/.pyenv/version
を開くとデフォルトのバージョンが書かれているので、これを好きなバージョンに書き換えれば、バージョンの設定を変えることができます。
pythonたちのすみか
なんとなく/usr/local
にみんな集まってるっぽかったんで、
find /usr/local -name pyconfig.h
やりました。
最初は何も考えずboost、boost-pythonのパスだけincludeしてコード書いたんですが、そうしたら"pyconfig.hがない"と怒られたので、それで調べたわけです。
最後に、クロスコンパイラー
普通macの動的ライブラリは.dylib
という拡張子でビルドされますが、boost-pythonの場合はクロスコンパイラでビルドして、拡張子が.so
のライブラリを作らないといけません。
それでEclipseでクロスコンパイラを選んでプロジェクトを作ろうとしたら、クロスコンパイラの選択画面が出てきました。
クロスコンパイラなんか、そもそもどこにあるかすらわからない!!!
ということで今回インストールしました。
- macportsで簡単に入れられることを知る
- 参考になったのは次のqiita: OSX の gcc を変更した話
- 普通にmacportsホームページでpkgダウンロードしてインストールします
- しかし、これでは
port
というコマンドが使えません。次のパスを追加する必要があります。
export MANPATH=/opt/local/man:$MANPATH
私は~/.bash_profileに追記しちゃいました。
リフレッシュするときはsource ~/.bash_profile
します。
そして、$ sudo port selfupdate
してあげてから、"OSX の gcc を変更した話"を参考にしてgccを入れます。
私はgcc 7を選びました。
ここまでやると、やっとEclipseでboost-pythonコードが書けるようになります!
(これに1週間以上かけました、実はT_T)
テストコードについては、「その2」で紹介します。