brew upgradeしたらpyenv経由で入れた実行ファイルが動かなくなった。

pyenv経由でインストールしたpython2/3に紐づく実行ファイルが実行できなくなったので対応した。

brewでインストールしていたpyenvが更新された。
これ自体はupgradeで簡単にできたのだが、そのあとちょっとした問題が起きた。
python3が動かない、jupyterも立ち上がらない。

どちらもこんな感じのエラーメッセージを残して止まっていました。

$ python3
/Users/piruty/.pyenv/shims/python3: line 21: /usr/local/Cellar/pyenv/1.1.5/libexec/pyenv: No such file or directory

エラー内容はわかりやすく、「pyenv 1.1.5のディレクトリにあったpyenv実行ファイルがなくなったから、python3起動できないよ」と言うもの。
ちなみに、更新後のpyenvのバージョンは1.2.0だった。
確かにupgradeした後にcleanupもしていた気もするので、そりゃなくなってるよね。

で、気になって/Users/piruty/.pyenv/shims/python3の中身を確認してみた。

#!/usr/bin/env bash
set -e
[ -n "$PYENV_DEBUG" ] && set -x

...

export PYENV_ROOT="/Users/fujii/.pyenv"
exec "/usr/local/Cellar/pyenv/1.1.5/libexec/pyenv" exec "$program" "$@" # この行のpyenv以下のパスを修正

うむ、pyenv 1.1.5配下の実行ファイルを参照している。
で、ここの1.1.5を1.2.0に直してあげると正常に実行された。

ただ、実行できなくなっているのはほかにも結構あったので(/Users/piruty/.pyenv/shims以下を参照)、一括で変換することにした。

$ cd /Users/piruty/.pyenv/shim
$ grep -l '/usr/local/Cellar/pyenv/1.1.5/libexec/pyenv' ./* | xargs sed -e 's/\/usr\/local\/Cellar\/pyenv\/1\.1\.5\/libexec\/pyenv/\/usr\/local\/Cellar\/pyenv\/1\.2\.0\/libexec\/pyenv/g'

これでOK。
カジュアルなbrew upgradeは気をつけよう。