.. title:: Pythonで心理実験 - 例題15-2 例題15-2:唐突にUbuntuをいじってみる ============================================== .. note:: VisionEggはnumpy.oldnumericというモジュールに依存していますが、最近のLinuxディストリビューションでインストールされるバージョンのnumpyではこのnumpy.oldnumericが廃止されているため(numpy1.9で廃止)、VisionEggを動作させることが出来ません。 従って以下の方法でインストールしてもVisionEggを利用出来ませんが、virtualenvなどを駆使して異なるバージョンのnumpyを共存させれば対応可能かと思われますので(未確認)、資料として残しておきます。 (2017/08/08) **A:** さて、Portable Pythonを紹介したついでに、今まで「Linux使う人は自分で何とかできるでしょ」って放置してきたLinuxも少しフォローしますか。今回使用するのは2011年4月にリリースされたUbuntu11.04。私はDebian派なんだが、UbuntuとDebianは共通点が多いんで結構好きだね。 **B:** Ubuntuって最近よく目にするんですけど、要するに何なんですか? **A:** 何って言われてもなあ。LinuxってのはもともとOSのカーネルのことで、カーネルだけでは使い物にならんからいろんなアプリケーション群とセットで配布されている。んで、人によってどんな組み合わせで配布するのがイイ!って好みが違うわけだな。そこでいろいろな配布セットが作られてきたわけだが、この配布セットのことをディストリビューションと言う。あんま詳しくないんで自信ないけど、大外れってことはないと思う。 **B:** ディストリビューション?また聞きなれない言葉が。 **A:** UbuntuとかDebianってのはそのディストリビューションの名前なんだよ。スマートフォンで話題のAndroidもLinuxディストリビューションのひとつだ。Wikipediaの「Linuxディストリビューション」を見たらうんざりするような系統樹が出てるよ。とにかく、Linuxはディストリビューションが異なると、同じアプリケーションをインストールする場合でも必要となる作業が異なる。すでにインストール済みのコンポーネントが違うからだ。この辺りがマイナーなアプリケーションやハードウェアを使おうとするときのLinuxの難点だな。 **B:** …なんだかよくわかりませんが。何が困るんですか? **A:** 例えば私が実験に使うADコンバータだが、Windowsなら「2000、XP、Vistaまたは7に対応」と書かれている。この10年くらいにリリースされたWindowsをほとんど網羅しているわけだ。一方、Linuxは「Linux対応」としか書かれていない。ディストリビューションによってはデバイスドライバをmakeするためにライブラリをmakeしなきゃいけなくて、そのライブラリをmakeするためには…って延々と作業しなきゃならん。若くて時間が有り余ってたころはそれもまた楽しかったが、もうおっさんになった今はそんなのうんざりだ。OSにお金がかかってもWindowsの方がいい。 **B:** そりゃ困りものですね。バッシュガードがPCD 104mmだからっていってもPCD 104mmのクランクに付くとは限んないようなもんですね。バッシュガード削ってはクランクに合わせてを繰り返して何とか付けましたが、ありゃ大変でした。 **A:** また誰にもわかんないような例えを…。 **B:** で、本題にはいかないんですか? **A:** B君がUbuntuって何?とか聞くからだろ。んじゃ本題に入るが、今ちょうどこのPCにUbuntu11.04を日本語Remix CDでインストールしたところだ。インストール直後にアップデートをかけた以外は本当に何もしていない。11.04からUnityという新しいデスクトップ環境が採用されていて、正直私はまだ操作に慣れていない。 .. figure:: img/15-2-01.png **B:** 僕は古いやつも使ったことないのでどうでも構いませんが。 **A:** さて、ここへVisionEggを動作させるために必要なパッケージを追加していく。私はapt派だが、aptって言ってわかる人には今回の解説は不要だろうから、今回はグラフィカルなインターフェースでパッケージをインストールできるSynapticを使ってみよう。Synapticの起動は…、解説すんの面倒くさいなあ。さすがにこの辺はOSの基本操作だから各自勉強してください。で、起動するとこんなウィンドウが開く。 .. figure:: img/15-2-02.png **B:** 相変わらず酷い講座だなあ。 **A:** 「クイック検索」に必要なPythonのパッケージ名を入力したら、説明文などにそのパッケージ名が入っているUbuntuのパッケージがリストアップされる。例えばtkinterと入力すると、以下のようにいくつかパッケージがヒットする。python-tkってのが怪しいので選択して下のメッセージを見ると、「Tkinterという名前でも知られています」って書いてあるから、このpython-tkがTkinerに対応するUbuntuパッケージだって事がわかる。パッケージ名の左の四角が白いので、現在python-tkはインストールされていない。 .. figure:: img/15-2-03.png **B:** 四角が白い? **A:** インストール済みのパッケージの例と見比べるとよくわかるかな。Python Imaging Library (PIL)は標準でインストール済みなんだが、imagingで検索するとこの通り。python-imagingというのが対応するUbuntuパッケージで、パッケージ名の左の四角が緑色になっている。これがインストール済みの印。 .. figure:: img/15-2-04.png **B:** ふむふむ、なるほど。 **A:** で、必要なのにインストールされていないパッケージがあったら、白い四角をマウスでクリックしてチェックマークをつけておく。チェックすると「依存により要求された変更を追加しますか?」と聞かれる場合があるが、これはインストールしようとしたパッケージが正常に動作するために必要なパッケージをSynapticが見つけてくれたものだ。基本的には「マーク」を選択しておけばいい。 .. figure:: img/15-2-05.png **B:** うわあ、すごくたくさんインストールされますね。これを手作業で探さなきゃいけなかったら大変だなあ。 **A:** 昔はまさにそういう状態だったんだがね。最近は本当に楽になった。さて…と。インストールしなきゃいけないのは以下のパッケージかな? それにしてもpsychopyやpygletはパッケージで提供されてるのか。将来的にはこっちに乗り換えた方がええかも知れんなあ。 + python-opengl + python-tk + python-imaging-tk + python-pygame + python-setuptools **A:** さて、全部チェックしたらいよいよインストールだ。「クイック検索」の隣の隣にある「適用」をチェックすれば、Synapticが必要なファイルをダウンロードしてインストールしてくれる。 **B:** ちょっと時間かかりますねえ。 **A:** その間にVisionEggを入手しておくか。SourceForgeのVisionEggのプロジェクトのページ( `http://sourceforge.net/projects/visionegg/files/visionegg/ `_ )に行って、最新版のtarballをダウンロードする。 **B:** tarball? **A:** tarでひとまとめにされたファイルの事だ。って、tarがわからんか。2011年5月現在、最新版は1.2.1なんで、visionegg-1.2.1.tar.gz というファイルをダウンロードしてくりゃいいってこった。 **B:** そーいう変な用語が多いからLinuxってヤなんですよね。 **A:** 確かにフレンドリーではないわな。ダウンロードしたファイルは展開してホームディレクトリに置いておく。このあたりの操作もOSの基本操作なので解説はパス。 **B:** あ、Synapticのインストール作業も終わりましたよ。 **A:** そうか。さて、ここからがLinuxのCUIに慣れていない人にはちょっとハードルが高い作業だ。「端末」を起動して、展開したディレクトリへ移動する。ディレクトリを移動するコマンドは cd 、MS-DOSやIPythonと同じだね。 **B:** ええと、cd visionegg-1.2.1 でいいのかな。 **A:** そうそう。で、以下のように入力する。 .. code-block:: console sudo python setup.py install **B:** setupとかinstallとかはなんとなくわかるけど、sudoってなんだ? すど? **A:** 「すど」じゃなくて「すーどぅー」な。su + doなんだが、suってのは…、ええい、面倒くさい! とにかくsudoって先頭に書いたら後続のコマンドをrootの権限で実行できるんだよ! rootってのはWindowsでいうAdministrator!! **B:** うわ、なんですか。いい年したおっさんがいきなり。 **A:** はあはあ。失礼。いや、間違えて書き換えたり消したりしちゃいけないファイルやディレクトリは、通常の利用者が勝手に操作できないように保護されている。rootというのは、こういう保護されたファイルを操作できるもっとも権限の強いアカウントの事だ。VisionEggのインストールの時には、管理者の権限が必要なディレクトリにファイルを書きこむ必要があるので、sudoコマンドを使って一時的にrootの権限を得なきゃいけない。 **この時にパスワードを聞かれるが、これはrootのパスワードじゃなくて現在ログインしているアカウントのパスワードなので注意** 。 **B:** へ? ログインユーザーのパスワードで管理者の権限を取得できるんなら、全然保護になってないんじゃないですか? **A:** sudoでrootの権限を得ることが出来るのは事前に登録されたユーザーのみだ。Ubuntuをインストールする途中でアカウントをひとつ作成しなきゃならんが、このユーザーはsudoでrootの権限を得られるように自動的に登録されている。 **B:** ふむふむ。…って、Aさん。今実行したコマンドがエラーで止まってるみたいなんですが。 **A:** なにぃ? .. figure:: img/15-2-06.png **A:** むう。確かに失敗しているな。最近のLinuxは良くなったと言ったとたんにこれだよ。 **B:** 何が悪いんですか? **A:** ちょっと待て。今出力を見ている。…ここだな。 .. figure:: img/15-2-07.png **B:** ええっと、WARNINGを見たらいいんですよね。The _vegl extension module to ... **A:** いや、そっちも読んどきゃいいけど大事なのはその上。「fatal error: Python.h: そのようなファイルやディレクトリはありません」ってやつだ。もっと厄介な問題だったらどうしようかと思ったけど、安心した。 **B:** へ? これは大したことない問題なんですか? **A:** 見てのとおり、Python.hというファイルがないんだよ。Python.hを含むパッケージがまだインストールされていないんだな。 **B:** じゃ、どのパッケージをインストールしたらいいんですか? またSynapticっての立ち上げて検索? **A:** んー。Synapticでそんなこと出来るのかな。Debianならweb上でパッケージに含まれるファイルを検索するサービスがあるんだが…、って、Googleで検索したらUbuntuにもあった。 `http://packages.ubuntu.com/ja/ `_ だ。ここへアクセスして **「パッケージの内容を検索」** でPython.hを検索する。すぐ上に「パッケージディレクトリを検索」ってのがあるけどそっちじゃないので注意。結果表示方法は「キーワードに似た名前のファイルが含まれるパッケージ」でいいでしょ。 .. figure:: img/15-2-08.png **A:** で、こいつが検索結果。 .. figure:: img/15-2-09.png **B:** 9個もパッケージがヒットしていますけど、どれを入れたらいいんですか? **A:** まず一番上はPython.hじゃなくてpython.hだからパス。 **Linuxではファイル名の大文字と小文字は区別される** から、まったく別のファイルだ。で、さっきの出力を注意深く見てもらえばわかるが、このバージョンのUbuntuにインストールされているPythonは2.7のようだから、Python2.6や3.1、3.2の奴は全部除外。python2.7-dbgはデバッグ版ビルドだからこれも除外。残るはpython2.7-devのみ。これだね。 **B:** デバッグ版ビルドってのがよくわかりませんが…。 **A:** 文字通り、デバッグをする時に便利な機能を有効にしたpythonだ。その代わりに動作が遅いので、通常は使用しない。 **B:** ふうん、わからないような、わからないような、やっぱりわからないような…。 **A:** 全部「わからない」じゃないか。まあ、とにかくSynapticに戻ってpython2.7-devをインストールすれば問題は解決する。実は、さらに足りないファイルがあるので先に必要なパッケージをリストアップしておこう。以下の3つだ。 + python-dev + mesa-common-dev + libgl1-mesa-dev (多分使用しているグラフィックカードに依存) **B:** ん? さっきpython2.7-devをインストールするって言いましたよね? 代わりにpython-devってなっていますけど、これは? **A:** ああ、検索したらpython-devってパッケージを入れておけばシステムのデフォルトのバージョンのpython-devがインストールされるってのを見つけてね。別にpython2.7-devを入れてもいいんだけど、何となく。 **B:** うーん、あとlibgl1-mesa-devの(多分使用しているグラフィックカードに依存)ってなんですか? **A:** VisionEggのインストーラを走らせると/usr/bin/ld: cannot find -lGLってエラーが出て怒られるんだな。これはlibGL.soというファイルが見つからないってことなんだが、そこでlibGL.soが含まれるパッケージを検索すると数十個のパッケージがヒットする。ひとつが上に挙げたlibgl1-mesa-devだし、他にnvidia-currentとかfglrxてなパッケージもひっかかる。この名前を聞いてピンと来ないかね? **B:** ほへ? nVidiaはグラフィックチップのメーカーですよね。GeForceがどうとか。fglrxってのは何だろう。 **A:** ATI Radeonのドライバなんだ。あ、今はAMDか? とにかく、複数のパッケージがlibGL.soを提供していて、多分自分のPCのっグラフィックカードに合ったパッケージをインストールするのが一番良いパフォーマンスが得られる。だから「多分使用しているグラフィックカードに依存」と書いたんだ。 **B:** さっきから多分、多分ってはっきり言い切らないのですごく気持ち悪いんですが。 **A:** 今回インストールしているマシンはnVidiaでもAMDでもないんで、libgl1-mesa-devしか確認してないからな。あんま考えたくないことだが専用のパッケージより汎用のパッケージを入れた方が安定する場合もあるし。やってみないことには何とも言えないんだが、残念ながらnVidiaやAMDのカードが載ってるマシンで現在テストに使えそうなのが空いていない。だから「多分」と言っている。 **B:** うがー、なんだかイライラしてきました。Windows版はダウンロードの作業が面倒くさくてぶーぶー言ったけど、Windowsの方がマシかも。 **A:** この程度の作業なら、慣れれば全然大したことはないんだがね。時々猛烈に面倒くさいケースがあるので、安易に「いやあ、こんなの簡単だよ」とは私は言えないな。各自の判断でどうぞ。 **B:** うーむ。 **A:** さて、これでもう一度sudo python setup.py installを実行したら無事インストール完了。visionegg-1.2.1ディレクトリの中にdemoというディレクトリがあって、そこにサンプルスクリプトがたくさん展開されているので、実行して動作確認してみよう。例えばgabor.pyを実行するなら端末から以下のように入力する。カレントディレクトリにはパスが通っていないので、gabor.pyの前に ./ が必要なことに注意。このあたりもOSの基礎知識だね。 .. code-block:: console ./gabor.py **B:** おお、動きましたね。なんだかデスクトップが違うだけで綺麗に見える気がするなあ。 **A:** フルスクリーンモードにせずに実行しているから、Vsyncに同期していないな。ウィンドウに描かれているGaborパッチ(白黒の縞)が中央付近で左右に少しずれている。まさにswap_buffers()の解説( :doc:`例題11-2 <./11-2>` )で説明した現象だな。 .. figure:: img/15-2-10.png **A:** デスクトップや端末の基本操作などはばっさり省略してしまったが、まあこんなもんだろ。 **IPythonやscipy、matplotlibもSynapticでインストールすることが出来るので、インストールしてみてほしい** 。エラーは起きないので特に難しいことはないはず。 **B:** はーい。 **A:** 最後にひとつだけ補足。VisionEggのスクリプトを走らせたときのお馴染みのダイアログだが、ここで画面の解像度を調節してその設定を保存しておこうとすると、以下のように書きこみ許可がないからセーブできないと怒られる。エラーダイアログに書いてある通り、/home/ほげほげ/VisionEggというディレクトリを作って、そこにVisionEgg.cfgをコピーしておけばいい。そうすると以後は/home/ほげほげ/VisionEgg/VisionEgg.cfgを設定ファイルとして読み書きするようになる。 .. figure:: img/15-2-11.png **B:** ほげほげってのは、ログインユーザー名でいいんですよね? **A:** 通常はそうだな。要するにログインユーザーのホームディレクトリにVisionEggというディレクトリを作ればいいのだ。 **B:** で、VisionEgg.cfgってファイルはどこからコピーしてきたらいいんですか? **A:** いつものダイアログに書いてあるだろ。上の例だと/usr/local/lib/python2.7/dist-packages/visionegg-1.2.1-py2.7-linux-i686.egg/VisionEgg/VisionEgg.cfgだよ。 **B:** 長い長い、Aさん、長いです! **A:** 長いって言われても、そうなんだから仕方ないだろ。他にもvisionegg-1.2.1/VisionEgg/にもVisionEgg.cfgがあるから、まだ削除していなければそっちからコピーしてもいい。 **B:** visionegg-1.2.1ってダウンロードしたファイルを展開してできたディレクトリですよね? 消していいんですか? **A:** 正常にインストールが終了したらな。まあdemoもこのディレクトリの中にあるので、消す前にdemoは別の場所に移しておくか、それとも邪魔じゃなければvisionegg-1.2.1自体を消さずに置いておいてもいい。ちょっとディスク容量を食う以外は何の視床もない。 **B:** Aさん、支障。 **A:** っと、辞書がなんか変な学習してるな。とにかく、唐突な思いつき企画の例題15はこれでおしまい。「今後の予定」に書いてある内容とか、きちんと実験の体裁を整えたサンプルとか、やりたいことはいっぱいあるけど、今のままでは内容が行き当たりばったり過ぎて授業に使うには問題がある。まずはそこをなんとかせにゃならん。 **B:** あ、ちょっと待ってください。最後にひとつだけ。Windowsでセットアップした時はpython2.5系じゃないと駄目だって聞いたような気がするんですが、こっちのpythonは2.7なんですよね? なんで2.5じゃなくても動くんでしょうか。 **A:** んー。「Windows版ではpython2.5を」ってのは、もともとWindows版のpython2.6系+pyopengl3.0系にバグがあって正常に動作しなかったからなんだな。Linux版はバグがないので、python2.5でも2.6でも2.7でも自由に使うことができる。 **B:** 必ずしもWindowsなら安心、っていうわけじゃないのか。うーん。 **A:** Web上じゃ「Windowsは不安」っていう人の方が声が大きそうだけどな。WindowsにはWindowsの良さがあり、LinuxにはLinuxの良さがある。つまんないまとめかも知れないが、そうとしか言いようがないね。それにしても、Linuxをセットアップするハードルは10年も前と比べると圧倒的に低くなった。Ubuntuを含めいくつかのディストリビューションではインストールせずに利用できるCD/DVDとかもあるし、Windowsしか使ったことがない人は、ぜひ一度使ってみて欲しいな。ではでは。