MacのPythonで対話コンソールの履歴が遡れない
pyenv
でpythonの環境を構築していたのですがある時から、対話コンソールで上下キーを押しても直前に打ったコマンドの履歴を遡れなくなってしまった。
代わりに、コンソールには^[[A
や^[[B
が表示されるようになった。
いろいろ原因を探っていると、readline
というライブラリが原因らしいことがわかった。
と言うわけで確認してみると以下のようなエラーが出た。
python -c 'import readline'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: dlopen(/Users/user/.pyenv/versions/3.7.1/lib/python3.7/lib-dynload/readline.cpython-37m-darwin.so, 2)
: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
Referenced from: /Users/user/.pyenv/versions/3.7.1/lib/python3.7/lib-dynload/readline.cpython-37m-darwin.so
Reason: image not found
どうやら、ライブラリが無いらしい
と言うわけで
brew install readline
で入れてみたら
Warning: readline 8.0.0 is already installed and up-to-date
To reinstall 8.0.0, run `brew reinstall readline`
どうやら既に入っているらしい…
よく確認してみると入っているバージョンが8
であることに気がついた。
pythonで求められているのはバージョン7
である。
以前は動いていたことを考えるとhomebrew
の自動アップデートでバージョンが変わってしまったことが原因らしい。
バージョンを下げようかとも思ったが、いくつか依存しているライブラリがあるのでそう簡単に下げられそうもない
解決法
最終的に、シンボリックリンクを作って対応することにした。
ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
バージョンが違うので、どこかで不具合が出そうだが 今は動いているのでしばらくの間は問題ないだろう。
参考
https://qiita.com/nwtgck/items/f5427c0d0f7827658bd5
https://stackoverflow.com/questions/3483723/python-interactive-mode-history-and-arrow-keys