homebrewで導入した、あるいは自前ビルドしたPythonでLeapMotionを動かそうとした場合
Fatal Python error: PyThreadState_Get: no current thread
というようなエラーが出てきてうまくいかないのではないかと思います。
これはLeapのインターフェースとPythonの橋渡しを提供してるオブジェクトLeapPython.so
の依存関係が、MacにバンドルされているPython用のものになっているからです。
これを解決してやります。
otool
とinstall_name_tool
というコマンドが必要になります。確かこれはX-codeのcommand line toolsが必要だった気がするので、コマンドが見当たらない方はそちらを先に導入してください。
まずotoolで調査です。
$ otool -L LeapPython.so
LeapPython.so:
@loader_path/LeapPython.so (compatibility version 0.0.0, current version 0.0.0)
/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
@loader_path/libLeap.dylib (compatibility version 0.7.0, current version 1.0.9)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
の部分が問題の箇所です。
これを書き換えます。
install_name_tool [-change old_path new_path]
という感じです。
僕の環境だと以下のようになります。new_pathの部分は各人の環境に合わせて適当に変更してください。
$ install_name_tool -change /Library/Frameworks/Python.framework/Versions/2.7/Python /usr/local/Cellar/python/2.7.6_1/Frameworks/Python.framework/Versions/Current/lib/libpython2.7.dylib LeapPython.so
macportsや自前ビルドでも同じようにアレすれば動くようになるかと思われます。
もう一つ注意としては、tmuxごしに動作させている場合はon_frameイベントが発動しないことです。