概要:
Python インタラクティブ実行(すなわちコマンドラインから操作)のときは「タブ補完」を利用したいのが人情というもの。
けれど Windows 上のPythonはなぜかデフォルトでは補完してくれない。
有効化する方法について調べるたびにつまづいて いつもあきらめていましたが解決したのでメモ。
・2022/10/31: python3.10以降に合わせて加筆、「pyreadline」→「pyreadline3」に置き換えました。
・2021/09/27:rlcompleterについて追記
重要:「readline」ではなく「pyreadline3」をインストールする。
環境:
・ Windows10
・ Python3.7.4
結論として
C:\Python\python.exe -m pip install pyreadline3
というように「pyreadline(3)」をインスコすればよいということがわかりました。
一方で 「readline」というパッケージも存在しこれはインスコ時に「Windowsでは動かない」と吐いてエラーになります。
ネット上に「Windowsも『readline』インスコで済む」説も見つかるのが曲者でした。
筆者はここで混乱し、たびたび断念してました。
※Linuxの場合は「readline」インストールで問題ないはず。
pyreadline をインストールした後は
無事、タブ補完できるようになりました。
場合によっては
import rlcompleter
rlcompleter.readline.parse_and_bind('tab: complete')
せよとかいう情報もあるようですが、ほんとに必要かどうかは不明。 ※その場合「rlcompleter」 も pip で入れるのかな
【2021/09/27追記】
ZIP配布用のpythonでは上記のrlcompleter設定が必要でした。 (バージョン:python-3.9.7-embed-amd64)
rlcompleterについて追加インストールは不要でした。
ただしこのやり方では履歴(readlineの機能なのかな?)が無効になってしまったため、履歴の登録を追加しました。
重要:「pyreadline」ではなく「pyreadline3」をインストールする。
pyreadline はとっくに更新が止まっている。 古めのPythonョンでないかぎりは、「pyreadline3」 を使うべし。
Python3.10 以降に古い方の pyreadline を入れると、AttributeError: module 'collections' has no attribute 'Callable'
というエラーが出てタブ補完も作動しない。
参考
https://qiita.com/cabbage_lettuce/items/4b662801543caee7e6b0
日本語で気の利いた記事を見つけられなかったためメモとして残しときます。