16
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows上Pythonインタラクティブ実行時にタブ補完を利用するためのメモ

Last updated at Posted at 2020-03-17

概要:
Python インタラクティブ実行(すなわちコマンドラインから操作)のときは「タブ補完」を利用したいのが人情というもの。

けれど Windows 上のPythonはなぜかデフォルトでは補完してくれない。

有効化する方法について調べるたびにつまづいて いつもあきらめていましたが解決したのでメモ。

・2025/04/14: python3.13に合わせて加筆、「parse_and_bind()」は呼び出しは必須ということに。
・2022/10/31: python3.10以降に合わせて加筆、「pyreadline」→「pyreadline3」に置き換えました。
・2021/09/27:rlcompleterについて追記


重要:「readline」ではなく「pyreadline3」をインストールする。

環境:
・ Windows10,11
・ Python3.7.4とか

まず、

C:\Python\python.exe -m pip install pyreadline3

というように「pyreadline3」をインストールします。

一方で 「readline」というパッケージも存在しこれはインスコ時に「Windowsでは動かない」と吐いてエラーになります。
ネット上に「Windowsも『readline』インスコで済む」説も見つかるのが曲者でした。
筆者はここで混乱し、たびたび断念してました。
※Linuxの場合は「readline」インストールで問題ないはず。

pyreadline をインストールした後は
無事、タブ補完できるようになりました。


parse_and_bind() でタブ補完を設定。

場合によっては

Python3.exe (古い情報、比較のため残す)
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の機能なのかな?)が無効になってしまったため、履歴の登録を追加しました。

【2025/04/14追記】
win11上のPython3.13では parse_and_bind() 呼び出しが必要でした。
なお 「rlcompleter.readline」は 「readline」で読み替えてよいようです。
rlcompleterについて追加インストールは不要。インポート「import rlcompleter」は必要。
parse_and_bind()によって履歴が無効化されるため履歴ファイルを登録し直します
↓ 以下、read_and_bind() すなわちタブ補完の登録と履歴ファイル読み書き処理の一例。

##  For Python3.exe
##  細部書き換えた後未実行のためエラー出るかもしれません。
##  ご利用は自己責任で。
try:
    import rlcompleter  ##  ← このインポートは必須の模様(謎)
    import readline
    readline.parse_and_bind('tab: complete')

    ##  binding history file
    import os
    histfile = os.path.join(os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], '.python_history')
    try:
        readline.read_history_file(histfile)
    except IOError as e:
        print(e)
        pass
    import atexit
    atexit.register(readline.write_history_file, histfile)
except:
    print(''' To enable TAB-completion, install pyreadlined3. 
ex: > python.exe -m pip install pyreadline3''')

重要:「pyreadline」ではなく「pyreadline3」をインストールする。

pyreadline はとっくに更新が止まっている。 古めのPythonョンでないかぎりは、「pyreadline3」 を使うべし。
Python3.10 以降に古い方の pyreadline を入れると、AttributeError: module 'collections' has no attribute 'Callable'というエラーが出てタブ補完も作動しない。


参考
https://qiita.com/cabbage_lettuce/items/4b662801543caee7e6b0


日本語で気の利いた記事を見つけられなかったためメモとして残しときます。

16
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?