.. title:: Pythonで心理実験 - 例題19-3 例題19-3:StandAloneを使うべきか? ================================================ **B:** えー、あけましておめでとうございます。相変わらずアレなアレですが本年もよろしくお願いいたします。 **A:** あ゛ー。あ゛げまじでお゛めでどうございばずー。げふげふ。 **B:** うわ、なんですかAさん新年早々。風邪? **A:** う゛ー。なんか知らんけどSのヤローに半日ほどずっと咳を浴びせられてな。どうやらうつされたらしい。 **B:** Sって作者のSさんですよね。そんな体調悪そうなのに半日も一緒に何してたんですか? **A:** いや。年末年始にSがこっちに来ているというんでな。ただひたすら食って飲んでた。いや、年末年始一人でヒマだったんで呼び出したんよ。で、延々と…。最後の方は奴もぐったりしてたな。 **B:** …今Aさんが咳をしているのは明らかにAさんが悪いと思いますが。 **A:** ま、そんなわけで今日は体調が悪いんよ。手短に終わらせよう。 **B:** また後日にしたらどうですか? **A:** いや、短い話だし、例題18で書いたことを一部撤回するので、早い方がいいと思ってな。 **B:** 撤回? また何かつまらないミスをしましたか? いつもはしれっと修正してるくせに。 **A:** んー。しれっと修正するにはちょっと内容が多いんでな。例題をひとつ起こすには少ないんだが、まあそこは思いつきで。で、何の話題かというとStandaloneインストーラについてだ。 **B:** ええと、 :doc:`例題18-1 <18-1>` ですね。 **A:** ああ。例題18-1では「わかってねえ奴はStandaloneはやめときな、へっ!」てなことを言ったわけだが、むしろ初心者にこそStandaloneを勧めるべきような気がしてきた。というのはだな、例題18-2で「自動アップデートの機能があるけどまともに動いたことなんてありゃしねえ」って言ったけど、どうもStandAlone版であればちゃんと自動アップデートが働くみたいなんだな。やはり、特に初心者にとっては必須パッケージを全部自分で集めてインストールするのは大変だろうからな、インストールやアップデートが簡単なのは大きなアドバンテージだろう。 **B:** 自動アップデートってどうやるんでしたっけ。解説ありました? **A:** いや、してないな。まあ自動アップデートってんだから自動的にアップデートが始まるんだが、CoderやBuilderのメニューのToolsからPsychoPy updates...を選択して手動で開始することが出来る。 .. figure:: img/19-3-01.png **B:** どれどれ…っと。ダイアログが出てきますね。 .. figure:: img/19-3-02.png **A:** PreferencesでcheckForUpdatesをしていてインターネットに接続してあれば、起動時に自動的にアップデートの有無を確認する。で、アップデートがあれば自動的にこのダイアログが表示される。ちなみにこの例では1.75.01を使用中で、最新版も1.75.01なんでAuto-updateは無効になっている。もし正式リリース前の開発バージョンをZipファイルで持っていて、それを試してみたいんならUse zip file belowの欄にそのzipファイルを指定してアップデートすることが出来る。ま、よほどのことが無い限り初心者の方が開発中バージョンで手動アップデートしなきゃいけないことはないだろう。 **B:** ふむふむ。 **A:** 気を付けてほしいのは、アップデートする時には適切な権限があるユーザーで実行してほしいということだ。64bitのWindows 7の場合、Standalone版を標準の設定でインストールするとC:\\Program Files (x86)\\PsychoPy2にインストールされるが、このディレクトリの内容を更新するには通常管理者の権限が必要になる。そこで、アップデートしたい時はいったんPsychoPyを終了して、アイコンを右クリックして「管理者として実行」を選択して起動しなおす必要がある。 .. figure:: img/19-3-03.png **B:** 普段使用する時にはそのまま起動して、自動アップデートが来た時だけ「管理者として実行」で起動しなおせばいいんですかね? **A:** ん。それでいいと思う。 **B:** …。 **A:** …。 **B:** …あれ? もしかしてもうこれでお開きですか? **A:** いや。もうひとつ補足しておきたい。例題18-1で書いたように、PythonはStandAlone版PsychoPyでのみ使用する、というんなら特に問題ないんだが、通常のPythonもインストールして使用したい場合はちょっと注意が必要なんだ。 **B:** ああ、そんなこと言ってましたね。 **A:** ちょっと初心者の方には難しいかもしれないが、Windows版について先に結論を言わせてもらうと以下の通りだ。 + StandAlone版PsychoPyをインストールすると、システム環境変数にStandAlone版sychoPyに付属の(以下 **Standalone PsychoPy版** )pythonへのパスが登録される。 + python.org公式のWindows用Pythonインストーラでpythonをインストールすると(以下 **python.org版** と表記)、レジストリに拡張子pyとpython.org版pythonとの関連づけが登録される。 **B:** ??? さっぱりわかりません。 **A:** 要するに、 **環境変数pathを使ってpythonを起動するとStandalone PsychoPy版が、レジストリを使ってpythonを起動するとpython.org版が使われる** のだ。 **B:** ちっともわかりやすくなっていないんですが…わざといたぶってますか? **A:** 何を言うか。じゃあもっと具体的にまとめてやろう。 .. csv-table:: :delim: $ pythonの起動方法$具体例 環境変数pathから起動される場合 |HTMLBR| (StandAlone PsychoPy版が起動)$コマンドシェル(cmd.exe)からpythonと入力してpythonを起動する |HTMLBR| コマンドシェルから **python setup.py install** としてモジュールをインストールする レジストリから起動される場合 |HTMLBR| (python.org版が起動)$拡張子pyのファイルをダブルクリックしてpythonを起動する |HTMLBR| python.org版用のインストーラを使ってモジュールをインストールする |HTMLBR| コマンドシェルから **setup.py install** としてモジュールをインストールする **B:** むむむ。同じスクリプトでも起動の仕方でどちらのpythonで実行されるのかが違うんですね。これは厄介だな…。 **A:** だろ? **B:** ちょっとよくわかんないな。ええと、それぞれの例の最後の項目なんですが、setup.pyでモジュールをインストールする時に前に"python"って付けるか付けないかで変わっちゃうんですか? どっちもコマンドシェルからの実行なのに? **A:** うむ。いつも言っていることだがこういう時はPCの気持ちになって考えるんだ。python setup.py installとした場合、Windowsはまずpythonという実行ファイルを探す。最初にカレントディレクトリから探すわけだが、カレントディレクトリにはpython.exeがないので環境変数pathから探す。だから環境変数pathを使うStandalone PsychoPy版のpythonで実行される。 **B:** はあ。PCの気持ちになんてさっぱりなれませんが、言っていることはわかります。 **A:** 問題はsetup.py installとだけ入力して実行した場合だ。やっぱりWindowsはsetup.pyという実行ファイルを探す。するとカレントディレクトリであっさりsetup.pyが見つかるわけだが、これはただのテキストファイルでWindowsの実行ファイルではない。Ubuntuなどのコマンドシェルならここでsetup.pyの1行目を確認するわけだが、Windowsはどうもここでレジストリを頼りにするらしい。レジストリを確認すると、拡張子pyにはpython.org版pythonが関連付けられているので、pyhton.org版pythonでsetup.pyを実行する。おわかりかな? **B:** むむー。なんかそう言われるとわかったような気もしますが、じゃあ説明してみろと言われたら絶対に説明できない自信があります。 **A:** ま、こーいうのをユーザーに意識させないようにするのがOSの仕事だからな。普通に使っている時にはなかなかここまで意識することはない。とにかく、そんなこんなでややこしいので、Standalone PsychoPy版とpython.org版のpythonを両方インストールしようって人は、よーっくこの辺りを認識したうえで注意して使ってほしい。 **B:** はーい。いやあ、今回はいつもと違う意味で難しかったなあ。 **A:** こらこら、勝手に締めに入るな。 **B:** へ? まだあるんですか? **A:** **python.org版pythonをインストールしていて、環境変数pathにpython.org版pythonのディレクトリを登録している人はさらに注意を要する** 。まあ私がそうなんだが。こんな感じにユーザー環境変数に登録してある。 .. figure:: img/19-3-04.png **B:** ああ、そういえば :doc:`準備編2 <00-2>` で環境変数pathに登録しておくと便利とかいう話がありましたね。あのころはまだpython2.5でした。いやあ、懐かしい。 **A:** 環境変数pathに登録されたディレクトリにに同名の実行ファイルが複数登録されているってのは、そのことに気づかなければなかなか厄介なトラブルの原因になる。最近のWindowsではシステム環境変数とユーザー環境変数の二種類の環境変数があり、ユーザー環境変数pathの内容はシステム環境変数pathの後ろに付け加えられる。で、pathを探索する時にWindowsは前から順番にたどっていくので、私のように **ユーザー環境変数にpython.org版pythonのパスを登録していると必ずStandalone PsychoPy版のpythonが先に見つかってしまう** 。 **B:** ふむふむ。じゃ、システム環境変数に登録したらいいんじゃないですか? **A:** まあ、そうだな。ただし、システム環境変数に登録したら必ずOKというわけではない。自分が使いたい方のpythonが環境変数pathの中で前の方に登録されていなければならない。簡単に確認するには、コマンドシェルを起動して echo %PATH%と入力してみるとよい。環境変数がずらっと順番に表示される。 .. figure:: img/19-3-05.png **B:** ええと…。ああ、一番最後ですね。まずC:\\Program Files (x86)\\PsychoPy2があって、その後ろにC:\\Python27があります。PsychoPy2ってついている方がStandAlone PsychoPy版、C:\\Python27がpython.org版ですね。 **A:** うむ。だからこの場合は、コマンドシェルから python と入力するとStandAlone PsychoPy版が起動するということだ。 **B:** ううーん。なるほどー。 **A:** で、これをpython.org版が起動するようにするためには、システム環境変数を編集してC:\\Python27がC:\\Program Files (x86)\\PsychoPy2より前になるようにすればいいわけだね。 **B:** なるほどなるほど。やはりこれはある程度わかっている人向けですかねえ。Aさんが最初勧めていたStandalone版を使わない場合ってのは… **A:** 関連モジュールのダウンロードやインストールがひたすら面倒くさいが、一度入れてしまえばこの手の面倒事は一切ない。 **B:** ですよね。 **A:** まあだからこそ例題18-1を書いた時にははStandalone版を使わずにインストールすることを勧めたわけだが。でも、考えてみればStandAlone版に付属するpythonで困る人ってのは、すでにPsychoPy以外の目的でpythonを使いこんでいる人だけなんだよね。で、そーいう人は多分今回程度の簡単な解説をすれば多分自分で自分に合ったセッティングが出来るでしょう、と。だから、その手のヘビーユーザーは自分で好きなようにしてもらって、初心者向けにお勧めできるのは?という観点に立てばStandalone版の方が優れているのかな…というわけで。 **B:** ま、そりゃそーでしょうね。逆に、というか、逆じゃないのかな、えーと。 **A:** ん?何が? **B:** えーとですね、初心者がStandalone版を使う事で逆に困る事ってないんですかね? **A:** ああ、あまりよくわからんけど、さっきの表にあるようにpython.org版向けのモジュールのインストーラはレジストリを使うんで、ちょっと面倒かも知れんね。多分手動でパッケージインストールディレクトリを指定すればいけると思うけど。多分。 **B:** 多分って、試してないんですか? **A:** このくそ忙しいのにクリーンなWindows機を用意して試してらんないっての。追加モジュールをインストールしなきゃいけないような人はすでに初心者じゃないので各自でなんとかしてくれたまえ。知らん知らん! **B:** ぐはっ、また入門講座の先生役にあるまじき発言が。 **A:** おっと、もうこんな時間か。今日はそろそろお開きにして帰らなければ。げふげふっ、ごふっ! **B:** また咳なんかしてごまかそうとして…って、あれ、そういえばAさん最初風邪だとか言って咳してましたよね。それがしゃべりだしてから普通の声で、終了宣言したと思ったらまた咳。…仮病? **A:** 本当に風邪なんだっちゅうの。ずーっとげふげふ言ってたら読者が読みにくいだろう。だから必死に堪えていたというのに… **B:** (疑いのまなざしで)…ま、いいでしょう。そんじゃあお家に帰ってゆっくり休んでくださいな。 **A:** おう、じゃあ帰るわ。一応次の例題のネタもあるんで例題19-4へのリンクは張っとくよ。 **B:** おりょ。次回予告ですか。風邪だとか言ってるのに大丈夫なんですか。 **A:** あんま大丈夫じゃねーけど、期待せずに待っといてくれ。じゃーねー。 .. |htmlbr| raw:: html