いままでfixできないバグをfixできたので、メモする。
いつもの環境:
local: git push origin master
↓
remote(bare): post-receiveでgit pull
↓
remote(cloned): post-mergeでpythonスクリプト実行
こういう環境設定で、 post-merge
スクリプトを実行して、
そのスクリプトの中にサードパーティ製のモジュールを import
しているとき
(そのモジュールはちゃんと pip install
してある)、
何故か git push
すると そのサードパーティ製モジュールが ImportError がraiseされる
ということがあって、なんでそういうエラーがでるかというと、remote
に複数のPythonがインストールしてあって、意図していないPythonが実行されている(すなわち pip install
した場所を使わないPythonが使われている)らしい。
たとえば
/usr/bin/python
$HOME/.pythonbrew/pythons/Python-2.7.3/bin/python
の2つがあるときに、 2 のPythonを使いたいのに、 1 のPythonが実行されている。
ので、 post-merge.py
をそのまま動かすんじゃなくて、
shellscript をかませて実行させると、うまく実行できた。
つまり
post-merge.sh
#!/bin/sh
BIN="$HOME/.pythonbrew/pythons/Python-2.7.3/bin/python"
$BIN $HOME/path/repo/post-merge.py
post-merge.py
import flask
あー、よかった、これでうまくいくわー