問題と当面の解決法
とあるpythonファイルを実行しようとしたら以下の様なエラーを吐き出しました.
$ python [filename].py
Fatal Python error: PyThreadState_Get: no current thread
[1] 1588 abort python [filename].py
ちなみに,条件としては以下の様な状況でした.
- 他のpythonファイルは実行できる
- クリーンインストール以前は実行可能であった
- 外部ライブラリ(gurobipy)を使用している
初めて見るタイプのエラーだったので何が原因だろうと調べてみたところ,簡潔に言えば,(元から?)Macにバンドルされているpythonとbrewでインストールしたpythonの間で何にかが悪さをし合ってるようです.
理由も分からないですが,もしかしたらpythonさんの管理もbrewで任せようってしたのがよろしくなかったのでしょうか.
と言うことで,brewのpythonさんをアンインストールしてしまいました.
brew uninstall python
これで解決.無事実行できるようになりました.
おそらくは2つのpythonさんのバージョンが違ったり(macが2.7.6でbrewが2.7.9),そのせいでパスが上手く通ってなかったりって原因なのでしょうが,よく理解してません.
しかし,直近のタスクが溜まっているので見て見ぬふりをすることにします.
もし,詳しい方がいらっしゃれば,原因を簡単に教えて頂ければ幸いです.
解決法(追記)
gurobiの開発者のGreg Glocknerさん曰く,gurobiはOSXにデフォルトでインストールされているpythonしかサポートしていないらしいですね.
つまり,brewのpythonをバージョンダウンするか,uninstall(消去),もしくはunlink(一時停止)するしかないのですね.
ちなみに,私はunlinkすることにしました.
とりあえずは,単純に
brew unlink python
で停止させておいて,必要なときは
brew link python
で復活させるって訳です,すっごい簡単!
もしくはpython内でgurobiを走らせる時のみ
import os
os.system('brew unlink python')
(実行内容)
os.system('brew link python')
のように書いても楽かもしれません.
解決していない気もしますが,何となく原因が分かったのでスッキリしました.