pythonで履歴が入力できないときの解決策【矢印キー、readline、Amazon Linux】

amazon linuxでpythonの対話モードを使っていると、上キーで履歴を入力することができなかった。その解決策メモ。


結論から言うと、readlineを入れてpythonを再コンパイルすれば解決する。



readlineを入れてpythonを再コンパイルする


readline(正確にはreadline-devel)をyumでインストールして、pythonを再コンパイルすれば解決する。


# readlineのインストール
sudo yum install -y readline-devel

# pythonのコンパイルとインストール
cd
wget http://python.org/ftp/python/2.7/Python-2.7.tgz
tar xfz Python-2.7.tgz
cd Python-2.7
./configure --prefix=/opt/python2.7 --with-threads --enable-shared
make
sudo make install

# ~/.bashrcに追記
alias python='/opt/python2.7/bin/python'
alias python2.7='/opt/python2.7/bin/python'
PATH=$PATH:/opt/python2.7/bin

source ~/.bashrc

# pythonのバージョン番号が表示されればインストール完了
python2.7 --version

システムのpythonのバージョンを変えるとyumとかが正しく動かなくなったりするので、別の場所にインストールしています。


一般ユーザーのpython実行時にはpython2.7、rootユーザーのpython実行時にはデフォルトのpython、が実行されるようになっています。


pythonの実行時にライブラリ(おそらく*.soファイル)が足りないよエラーがでるようになった場合は、下記のコマンドを実行してください。


# /etc/ld.so.conf.d/opt-python2.7.confに追記
/opt/python2.7/lib

sudo ldconfig

以上の手順で、pythonの対話モード時に上キーで履歴を入力できるようになっているはずです。



参考リンク


stackoverflowの解説記事。readline-develがないんじゃないの?ってズバリ指摘されています。

Python shell: Arrow keys do not work on remote machine


「カーソルキーで入力されるのは ^[[A という文字列です。入力の早さから、人間が入力したのかどうかを判定し、人間っぽい場合は矢印キーとして動作します」という記述があった。へー。

viエディタで矢印キーがうまく機能しない


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール