Eclipse
MacOSX
boost
BoostPython
HighSierra

Mac/EclipseでBoost Pythonを使う(python3.x) その1

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」で紹介します。