LoginSignup
19
18

More than 5 years have passed since last update.

non-AppleなPythonでLeapMotionを動かす方法

Posted at

参考: https://forums.leapmotion.com/forum/support/community-support/os-x/3169-python-pythreadstate-get-no-current-thread

homebrewで導入した、あるいは自前ビルドしたPythonでLeapMotionを動かそうとした場合

Fatal Python error: PyThreadState_Get: no current thread

というようなエラーが出てきてうまくいかないのではないかと思います。

これはLeapのインターフェースとPythonの橋渡しを提供してるオブジェクトLeapPython.soの依存関係が、MacにバンドルされているPython用のものになっているからです。

これを解決してやります。
otoolinstall_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イベントが発動しないことです。

19
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
18