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はなぜかデフォルトでは補完してくれない。

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

・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


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

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?