MacPortsのPythonパッケージでコマンドラインの入力が表示されなくなる件・・・
例によってハマった話です。ただ今回は思いもかけないところで穴に落ちました。事象としてはおおよそ次のようなもの:
- MacPortsでインストールしたSphinxの
sphinx-quickstart
コマンドを実行したら、同コマンドからユーザに対して各種オプションの値の入力を求めるメッセージ(=readlineのメッセージ)がターミナル上表示されず、何かを入力した後deleteキーで入力を取り消すと表示される。 sphinx-quickstart
コマンドが完了した後、今度はキーボードから入力した内容がターミナルに表示されなくなる(入力したコマンドの出力は表示される)。- 新しいターミナルのウィンドウを開くとそちらでは事象が解消しているが、そこで
sphinx-quickstart
コマンドを実行するとやはり同じ事象になる。
調べたところQiitaに先達の記事があり、MacPortsのPythonパッケージに問題がある模様。対症療法として「事象発生後、stty sane
コマンドを実行する」というものが紹介されていました。これを実行するとたしかにターミナルのウィンドウを開き直さなくても事象が解決します。ただしsphinx-quickstart
コマンドを実行するとまた同じ事象に遭遇します。
そこでこのQiita記事からリンクされているsuperuser.com(stackoverflowの姉妹サイト)のQAエントリー"OS-X terminal behaves oddly after running Python interactively"(Pythonを対話モードで実行したあとmacOSのターミナルの挙動がおかしくなる)という記事を参照したところ、MacPortsで+readline
バリアント指定付きでPythonをインストールするとこの事象に対処できるとのこと。私の端末でMacPorts経由でインストールしていたPythonはバージョン2.7でしたので、さっそくsudo port install python27 +readline
コマンドを実行してみました:
$ sudo port install python27 +readline Password: ---> Computing dependencies for python27 ---> Fetching archive for python27 ---> Attempting to fetch python27-2.7.12_2+readline.darwin_16.x86_64.tbz2 from https://packages.macports.org/python27 ---> Attempting to fetch python27-2.7.12_2+readline.darwin_16.x86_64.tbz2 from http://lil.fr.packages.macports.org/python27 ---> Attempting to fetch python27-2.7.12_2+readline.darwin_16.x86_64.tbz2 from http://fco.it.packages.macports.org/mirrors/macports-packages/python27/python27 ---> Fetching distfiles for python27 ---> Attempting to fetch Python-2.7.12.tar.xz from http://jog.id.distfiles.macports.org/macports/distfiles/python27 ---> Verifying checksums for python27 ---> Extracting python27 ---> Applying patches to python27 ---> Configuring python27 ---> Building python27 ---> Staging python27 into destroot ---> Installing python27 @2.7.12_2+readline ---> Deactivating python27 @2.7.12_2 ---> Cleaning python27 ---> Activating python27 @2.7.12_2+readline To make this the default Python or Python 2 (i.e., the version run by the 'python' or 'python2' commands), run one or both of: sudo port select --set python python27 sudo port select --set python2 python27 ############################################################## # IF YOU ARE USING PYTHON FROM THE TERMINAL, PLEASE INSTALL: # py27-readline # TO AVOID A LIBEDIT / PYTHON INTERACTION ISSUE. # REF: https://trac.macports.org/ticket/48807 ############################################################## ---> Cleaning python27 ---> Updating database of binaries ---> Scanning binaries for linking errors ---> No broken files found.
再インストールのあとでsphinx-quickstart
コマンドを実行してみるとたしかに事象が治っています。いえ、正確にいうとsphinx-quickstart
コマンド自体の挙動はまだ若干おかしい部分がある(readlineのメッセージが表示されたあとのキャレット位置がメッセージの文頭にかぶる、deleteキーを押した時メッセージが消えてしまう、など)のですが、Pythonの再インストール前の「今何を質問されているのかすらわからない」というようなどうしようもない状態ではなくなりました。もちろんコマンド実行の後ターミナルの挙動は正常です。
いやはや、Sphinx自体で何か起こるならともかくまさかPythonインタープリタそのものの(パッケージの)バグにハマるとは思っていませんでした。。。