PyROOTを起動した時にno current threadというエラーがでる

Pocket

問題

もうROOTを使うこともあまりないのですが、いざ必要になってPyROOTを起動しようとしたときに、「Fatal Python error: PyThreadState_Get: no current thread」とでて、

> python
Python 2.7.12 (default, Jun 29 2016, 14:05:02) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ROOT
Fatal Python error: PyThreadState_Get: no current thread
zsh: abort      python

のようなエラーがでるとともに、「Python quit unexpectedly」というダイアログが出てPythonが終了してしまう問題が起きました。

PyROOTを起動した時にエラーで落ちる時のダイアログ。
PyROOTを起動した時にエラーで落ちる時のダイアログ。

原因

  • ROOTをインストールして以降、HomebrewでOS X付属のもの(/usr/bin/python)とは違うpythonをインストールした。
  • デフォルトで起動するpythonを、Homebrewで入れたものにしていた。つまり
    /usr/local/bin/python になっていた。
  • ROOTに付属しているPyROOTは、OS X付属のpython用にビルドされているので、ライブラリを読み込む時の不整合で上記のエラーが出る。

解決法

  1. OS X付属のPythonを使う。/usr/bin/pythonからimportすると、以下のようにエラーがでない。
    > /usr/bin/python
    Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
    [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import ROOT
    >>> 
    
  2. ROOTをソースコードから自分でビルドし直す。

暫定的に使えればいいのなら、方法1で問題なさそう。ずっと使うなら、ちゃんとバージョンを合せてビルドしなおすほうが良いですよね。