Python初学者が最初に学ぶべきこと

「Python初学者が最初に学ぶべきこと」のひとつを同僚などに伝えるのに、ずっと困っていたことが一つ。

どんな言語であれ、真っ先に学ぶべきことは、「ドキュメントのありか・引き方」なわけである。このうち、「詳細なドキュメント」については、(Python 2.7 で Sphinx ベースになってからは特に)公式サイト(ver3.xはこっち)を置いて他はない。ここを活用せずに初心者向け書籍ばかりに頼るのは、大変もったいない。

もうひとつは、「知っているけれども暗記はしていない」ものを手早く知るためのオンラインヘルプの使い方。ところがこれが、Windows 環境ではなかなかにイケてない。

まずは DOS プロンプトから python を起動した場合:
pydoc_01

これは良いであろう。ただ、MSYS の bash 経由で python を起動すると、こうなることがある:

起動の仕方による。ならないこともある。同様に、Windows メニューの「プログラムとファイルの検索」に直接 python を指定して起動した場合も、同じことがおこる。

じゃぁ、IDLE はどうか? これは、問題なく動作はするのだけれど:

ページャはついていないので一気に流れて行ってしまい、スクロールバーで戻すしかなく、快適とはいえない。(そもそも大規模なモジュールだったら、これでは非常に困る。)

面白いことに、というか残念なことに、なぜだか Windows 版の pydoc は実行形式が提供されていなくて、Unix系ではコマンドラインにいる場合は結構 pydoc のお世話になるのだけれど、Windows 版ではちょっと小細工した説明が必要で:
pydoc_02

ただこの小細工、基礎を知るには案外良いネタで。-m は「モジュールをメインとして実行」(正確には「run library module as a script」)する指定で、このようにメインスクリプトもしくは実行ファイル(.exe)が提供されていなくても、実行することが出来ることが多い。(それを前提に設計されたモジュールも多い。)

なお、python -m pydoc を使っても、「more なんか知りません」は起こる。これが怖ろしいので初心者に説明出来ない、ということにもなる。

さて。そんな悶々とした日々をずっと過ごしてきたのだけれども、最近初心者と一緒に過ごす時間が長いもんで、改めて探ってみたところ、これまで気付いていなかった発見をした。これ:
pydoc_03

これ、Tkinter さえあれば動くようになっていて、また、pydocgui.pyw の中身は実にこれだけ:

pydocgui.pyw
1 # Note:  this file must not be named pydoc.pyw, lest it just end up
2 # importing itself (Python began allowing import of .pyw files
3 # between 2.2a1 and 2.2a2).
4 import pydoc
5 
6 if __name__ == '__main__':
7    pydoc.gui()

なわけなので、未確認だけれど、Unix 系でも動くと思う。

選択肢が一つ増えたことは良いのだけれども、悩みもまた増えてしまって。

まず、pydocgui.pyw は、調べたいものがわかっているものに使うのは鬱陶しい。画像でわかったと思うけれど、「os」そのものを引きたくても、「関係しそうな」全く無関係のものを検索するのを黙って見守るしかない。とはいえ、「取り付く島」用途や、「思わぬ発見」用途には悪くないだろう。

次に、pydocgui.pyw が動作する仕組み由来の問題。これ、画像からわかる人はわかると思うけれど、その場で WEB サービスとして振舞います。つまり、「ネットワーク系のトラブルで想像が出来ることなら何でも」起こります。真っ先に遭遇するのは多分意図しない二重起動(前回起動が死んでない)ことが理由の、ポート占有問題ね。この場合はタスクマネージャ起動すれば python.exe、pythonw.exe が死んでないことがわかると思うんで、いったんそれらを殺せば、生き返ります。ほかにも起こりそうな気がするね。

ipython は、Windows 環境の場合は、ちょっと苦労しないと快適ではないけれども、快適な環境が用意出来たならば、とにかく「?」を多用すればよろしい。なので iPython の場合は、そこそこ悩みは少なめ。

emacs からの python 対話起動は…、ゴメン、ワタシは Unix でさえ M-x shell 使わない人なので、ましてや「cmdproxy なんか死ねばいいのに」とイラつきながら M-x shell を「使えるように」なんかしないので、わからない。素の emacs 24 Windows バイナリ内での対話モード python はそもそもまともに動作しませんが、もしこれが動けば、多分 IDLE と似た使い勝手の help 参照になると思う。

結局のところは Windows で Python を手軽にやりたければ、まともな iPython 環境を作るのが案外一番近道で、そうでなくとも Eclipse + PyDev 環境を苦心して作って、「苦労して動かす」方が、素の python よりは苦労ではないのかもしれなくて、そしてこれらのいずれも適わないならば、オンラインヘルプはある程度諦めて、公式サイトマニアになれば良いと思う。

Python は Windows 版も相当頑張っている(オープンソースのスクリプト言語の中ではおそらくベスト)けれども、それでもなお Unix 系でのそれと比較すると色々苦痛だよなぁ、って話でした。あれ、違ったっけ? まぁいいか。


01:50追記
書き忘れてた。MSYS の場合は、「moreなんてプログラム、あるもんか」問題は、知ってれば

1 me@host: ~$ PAGER=less python -m pydoc os

これだけのことです。けどさ。これ、初心者にイキナリ教えられる? それとも (Unix系さえも初心者に) MSYS 必須にする? てわけで、悩みの解決にはあんましならんとです。


2015-04-05 追記
Unix系の場合、pydocgui.pyw はインストールはされないですね。

誰が欲しいんだ、Unix系で、とは思うけど、どうしても欲しければ

1 me@host: ~$ python -c 'import pydoc ; pydoc.gui()'

で起動出来ますよん。ただし、要 Tkinter ね。linux とかのパッケージマネージャを使わずに自力でビルドしたような環境では、Tkinter 使えない場合もあるのでね、必ず使えます、とは言わない。(そもそも telnet 超しでは役立たずだからな。)