例題25-1:Standalone PsychoPyのパッケージを追加・更新する

A: お久しぶり!とかご挨拶している時間の余裕もないのでいきなり本題。PsychoPy 1.82.02rc1が(2015年)7月23日に公開されました。このバージョンではPsychoPy BuilderやCoderにおけるUnicode関連の問題が数多く修正されており、日本語OSの利用者にとっては大きな意味があると思われます。

B: (なんか本気で切羽詰まっているみたいなのでいじらないでおこう…)

A: 修正点は数多くあるのですが、恐らく一番大きな修正はファイル名やフォルダ名に日本語を含む場合への対応です。 例えば卒論の学生さんがFドライブのUSBメモリにF:\卒論\予備実験なんて名前のフォルダを作ってそこにBuilderの実験を保存していた場合、従来のPsychoPyでは正常に実験が動作しませんでしたが、1.82.02では動作するようになります 。この手のトラブルはとても多いので、「日本語を使わないフォルダに移動させてね」とか指導しなくてすむメリットは大きいです。

B: んー。そんな強調するほどすごいことかなあ。

A: 私やB君のように 古い人間 には「パスに日本語が含まれる」なんてだけでも嫌な予感しかしないわけだが、最近のコンピュータで育った学生さんにとっては日本語が使えるのは当然なのだよ。だから「フォルダ名やファイル名に日本語を使うな」と言われてもピンとこないのだ。

B: ちょ、勝手にAさんと同じ「古い人間」にカテゴライズしないでください。

A: そんなわけで1.82.02rc1が公開されて「ああ、よかったな」と思うわけだが、残念ながら1.82.02rc1にアップグレードしても一部のUnicode問題しか修正されないのだ。

B: へ?なんでですか?

A: 従来のPsychoPyのUnicode問題の中には、 PsychoPyそのものではなく、PsychoPyが内部で利用しているMatplotlibのバグに由来するものがある からだ。具体的に言うと、古いMatplotlibではMatplotlibを利用するスクリプトを日本語の文字を名前に含むフォルダに保存してそこから実行することができなかった。

B: 長い長い。ちゃんと読点をつかいましょうよ。

A: とにかく、PsychoPyをいくら修正してもMatplotlibのバグは修正されないので、PsychoPyを1.82.02rc1にアップグレードするだけじゃ問題は解決しないのだ。PsychoPyと同時にMatplotlibも最新バージョンに更新する必要がある。

B: 更新したら直るんですか。

A: この記事を書いている時点でMatplotlibは1.4.3がthe latest stable releaseで、この1.4.3では問題は修正済みだ。どのバージョンで修正されたのか正確には把握していないが、確か以前試した時に1.4.0でダメだったような覚えがある。

B: んー。そんないい加減な記憶で記事書いていいんですかー?

A: ま、Unicode文字を含むパスのトラブルで1.82.02rc1にアップグレードしても解決しない場合はMatplotlibのバージョンをチェックしていただければと思う。それで十分かと。

B: なるほど。…で?

A: ん? 何が「で?」なんだ。

B: いや、その話は分かったんですが、わざわざこれを書くためだけに「Pythonで心理実験」の例題25にしたんですか? 例題19のシリーズに追加でよかったのでは?

A: 話は最後まで聞き給え。そんなわけでMatplotlibをアップグレードしたいわけだが、B君は「Matplotlibをアップグレードしろ」と言われて自力でできるかね?

B: 馬鹿にしないでくださいよ。sudo apt-get upgrade matplotlib、かな?

A: ふむ。aptを使えるLinux系OSならapt-getが便利だな。でもパッケージ名はmatplotlibかな?

B: えっ、えーと。…違うんですか?

A: Ubuntuならpython-matplotlibだな。まあそれはさておき、今Ubuntuのパッケージ一覧を検索したら、最新のLTSリリースである14.04LTSでもMatplotlibのバージョンは1.3.1なのだよ。古すぎる。じゃあどうするね?

B: うむむ。

A: でもまあUbuntuはマシな方よ。WindowsのStandAlone版を使っている場合はどうする? EXE形式のコンパイル済みパッケージのインストーラは使えないんだぜ?

B: うむむむむむー。そういえばAさん、StandAlone版はお勧めしないって昔言ってましたね。確か例題の…

A: 例題18-1 だな。その後 例題19-3 では「初心者にはStandAloneの方がお勧め」とか「 追加モジュールをインストールしなきゃいけないような人以外はStandAloneで十分では 」と意見を変えたけど、これは言い換えれば「モジュールを追加したりする必要がある場合はやっぱりStandAlone版を使わない方がいいんじゃないか」と思っていたということだ。

B: ふむふむ。そりゃそういう意味にとれますな。

A: 実際、WindowsのStandAlone PsychoPyに最新版のMatplotlibをインストールするとかいうと結構厄介だったのだが、最近 wheelでパッケージが提供されるようになってきて事情が変わってきた 。wheelの使い方を覚えればWindowsのStandAlone PsychoPyでも(ピー 自主規制)な手段を使わなくても簡単に作業出来と思う。

B: なんですか、そのwheelとかいうのは。

A: 簡単に言えば、pythonのパッケージ配布に使えるフォーマットのひとつだ。

B: 全然簡単じゃありませんが…。

A: ファイルをまとめて送受信したりするときにZipファイルとかにまとめるよな。それと同じようなもので、パッケージを構成するファイルをまとめたものがwheelだ。従来にもpythonでパッケージ配布に使えるフォーマットはいろいろあったのだが、wheelはコンパイル済みのバイナリファイルを含むことができるのが大きな特徴だ。

B: コンパイル済みの…?

A: ちょっとマジで今日は時間無いからこの辺で勘弁して。以前の例題でpandasをインストールするときに「通常の方法でインストールできないから」ということで非公式インストーラーを利用させてもらったが( 例題22-2 )、wheelが用意されていればこのような非公式インストーラーに頼らなくてもインストールすることができるようになる。

B: おお、そりゃありがたいんじゃないですか?

A: だからありがたいって言ってるだろ。

B: このページをテキスト検索してもAさんの「ありがたい」という発言は今のが初めてだと思いますが。

A: だーっ、うるさい。とにかくこのwheel形式のパッケージを使えばStandAlone PsychoPyにMatplotlibの最新版を簡単にインストールできる。ただ、wheelを使うためにちょっとした準備が必要なので、この例題25ではそれを解説しておこうというわけだ。

B: ふう。やっと本題が出てきましたか。やれやれ。

—————————— * * * ——————————

A: さて、やっと本題に到達したのでさっさと手順を解説するぞ。これから解説する手順は以下の通り。

  1. 環境変数を追加する
  2. pythonのパッケージインストールeasy_installを使えるようにする
  3. pythonのパッケージ管理ツールpipを使えるようにする
  4. wheelパッケージをインストールする
  5. matplotlibをインストールする

B: 簡単といいつつ結構手順がありますね。

A: wheelのインストールまでは一回やってしまえばOKなので、そんなに面倒くさくない。

B: (えー、とい非難のまなざし)

A: まず環境変数の追加。これは、今回使えるようにするeasy_installやpipをコマンドプロンプトから実行するときに、いちいちフルパスを入力しなくても済むようにするために必要。逆に言えばフルパスを入力する手間を惜しまないのであれば環境変数はいじらなくていい。

B: そーゆー人心を惑わすようなことを言わずに「設定が必要」って言い切っちゃえばいいのに。

A: Windows10にStandAlone PsychoPy 1.82.01をインストールしているものとして手順を説明する。検索バーに「環境変数」と入力すると「環境変数の編集」ダイアログを開くことができるので、ユーザー環境変数にPATHという項目を新規追加してC:\Program Files (x86)\PsychoPy2\Scriptsを追加する。もちろんすでにPATHを設定している場合は「新規...」ではなく「編集」をクリックして追加すること。環境変数については 準備編2 も参照のこと。32bitのWindowsではPsychoPyがProgram Files (X86)ではなくProgram Filesにインストールされるので、C:\Program Files\PsychoPy2\Scriptsを追加すること。

../_images/25-1-01.png

B: おお、Windows10だ。それにしても今更準備編2とは。そっちも驚き。

A: これで環境変数の追加は終了。続いてeasy_installとpipを使えるようにする。この作業にはコマンドプロンプトを使用するが、PsychoPyのインストールディレクトリを変更するので、管理者として実行しておくのがポイント。

../_images/25-1-02.png

B: ふむふむ。

A: さて、手順でeasy_installとpipを「使えるようにする」という微妙な表現をしたわけだが、実はeasy_installもpipもStandAlone PsychoPyに含まれている。試しにコマンドプロンプトからeasy_installとかpipとか入力すると、「’pip’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」とかいうエラーメッセージが出ない。ちゃんとeasy_installやpipが存在している証拠だ。

B: あのー、まさにそのエラーメッセージが出るんですが。

A: そりゃ環境変数の設定が間違っていないか? ちゃんと確認するように。

B: あ、このPCでは(X86)が不要でした。

A: ほれ見ろ。えーと、ごほん。読者のみなさまで、1.82.01以前のStandAlone PsychoPyを使用している場合は環境変数をセットしてもpipやeasy_installがないと怒られるかもしれません。その場合は、PsychoPyのインストールディレクトリにScriptsというフォルダがあることを確認しておいてください。これから説明する作業を行うと、そこにpip.exeやeasy_install.exeといったファイルが作成されます。なお、 新しいStandAlone版が出た時には付属のパッケージも更新されるので、PsychoPyをアップグレードするときには最新のStandAlone版をベースにすることをお勧めします

B: ところでpipとかeasy_installとか入力しても何も起きないんですが。

../_images/25-1-03.png

A: うむ。それが「使えるようにする」と言った理由だ。StandAlone PsychoPy 1.82.01に入っているpipやeasy_installは壊れていてそのままでは使えないのだ。そこで、ここへ最新版のeasy_installとpipをインストールして使えるようにする。

B: なるほど。

A: まずはeasy_installからいこう。easy_installはsetuptoolsというパッケージに含まれている。PyPIへアクセスしてsetuptoolsのページを開くと、setuptoolsをインストールするためのpythonスクリプトez_setup.pyをダウンロードすることができる。setuptoolsのページのURLは https://pypi.python.org/pypi/setuptools で、ez_setup.pyは https://bootstrap.pypa.io/ez_setup.py だ。

../_images/25-1-04.png

B: ez_setup.pyを「リンク先を保存」すればいいですね。

A: 別にどこへ保存してもいいんだけど、デスクトップに保存することにしよう。ez_setup.pyを保存したら、PsychoPyのpythonでez_setup.pyを実行する。普通にStandAlone PsychoPyをインストールしていれば、コマンドプロンプトでpythonと入力するだけでPsychoPyのpythonを実行できる。具体的には、先ほど管理者として実行しておいたコマンドプロンプトで python ez_setup.py を実行する。以下のスクリーンショットの例ではカレントディレクトリがデスクトップになっていることに注意。

../_images/25-1-05.png

A: これでeasy_installが使えるようになった。続いてpipのインストールだが、これはたった今インストールしたばかりのeasy_installを使うのが簡単。管理者として実行したコマンドプロンプトで easy_install –upgrade pip を実行する。pipは壊れているけどすでにインストールされているので、–upgradeオプションを付けておくことが重要。

../_images/25-1-06.png

A: これでpipが利用できるようになったはず。ここで動作確認にコマンドプロンプトで pip freeze と入力してみてほしい。

../_images/25-1-07.png

B: pip freeze…と。おお、これってパッケージの一覧ですかね?

../_images/25-1-08.png

A: pip freezeはインストール済みのパッケージの一覧をいろいろなフォーマットで表示するコマンドだ。便利なので覚えておくといい。

B: なんでfreezeなんですかね?

A: んー。そりゃ私も知らん。ちなみに単に一覧を表示するだけならpip listというコマンドもある。

B: ???

A: ま、先へ進むぞ。続いてwheelパッケージのインストール。これはpipを使えば簡単にインストールできる。 pip install wheel を実行。まあ実は今回の作業だけならwheelパッケージは無くてもいけるようなんだが、一応。

../_images/25-1-09.png

B: これで準備は終了ですね?

A: うむ。ではいよいよ本丸のMatplotlibのアップグレードだ。Matplotlibのダウンロードページから、最新版のMatplotlibのwheelをダウンロードする。 http://matplotlib.org/downloads.html を開くと、ずらっとパッケージ配布ファイルの一覧が表示される。ここから適切なwheelファイルを選ばないといけないわけだが、今回はmatplotlib-1.4.3-cp27-none-win32.whlを選ぶ。

../_images/25-1-10.png

B: どういう基準で判断したらいいのかさっぱりわからんのですが。

A: まずWindowsのStandAlone PsychoPyの話をしているんだから Windows の中から選ぶのはわかるだろう? Windows用パッケージ配布ファイルを眺めていると、拡張子が.whlのものと.exeのものがあるが、.whlがwheelのファイルだ。だから.whlのファイルの中から選ぶ。

B: .chmというのもあるんですが…。

A: それはWindowsヘルプ形式のMatplotlibのヘルプファイルだ。まああると便利だと思うならダウンロードしておくとよい。全部英語だけどな。

B: …パス。

A: ファイル選びに話を戻すが、ファイル名の中央付近にcp26、cp27、c32、cp33、cp34とあるのは対応するPythonのバージョンを示している。StandAlone PsychoPy 1.82.01のPythonは2.7系なので、cp27を選ぶ。最後にwin32とwin_amd64だが、これはStandAlone PsychoPy 1.82.01のPythonが32bit版なのでwin32を選ぶ。実行しているWindowsが32bitか64bitかというのは関係ないので注意。

B: いつものパターンですね。

A: 次期バージョンであるPsychoPy 1.83.00ではWindowsでも64bit版PythonをベースにしたStandAlone版が配布されるらしいので、その時は注意しないといけないだろうな。とりあえず今は32bitと思っておけば間違いない。以上のポイントから、matplotlib-1.4.3-cp27-none-win32.whlに絞られる。

B: むむむ。自分一人で判断できるかな。

A: ダウンロードしたら、pipを使ってwheelをインストールする。管理者として実行しておいたコマンドプロンプトから、pip install matplotlib-1.4.3-cp27-none-win32.whl を実行する。例によってカレントディレクトリにmatplotlib-1.4.3-cp27-none-win32.whlが置かれているものとする。

../_images/25-1-11.png

B: えーと、今のでMatplotlibをインストールしたんですよね。じゃあこれで作業終了ですか?

A: おう。作業終了だ。お疲れさん。

B: ちゃんとインストールされたのか不安なんですが…。

A: 簡単なスクリプトを実行してみればいい。PsychoPy Coderを起動して、適当なファイル名で以下のようなスクリプトを作成する。そうだな、checkmplversion.pyとでもしておくか。2行目のversionの前後は _ を2文字ずつなので注意。不安な人はこれをコピペして。→ matplotlib.__version__

../_images/25-1-12.png

B: 長ったらしい名前ですね。hoge.pyとかでもいいですか?

A: 全然構わんよ。実行したら、Coderの出力ペインにバージョン番号が表示されるはず。上のスクリーンショットでは1.4.3と表示されているので、確かに1.4.3にアップグレードされている。

B: ふう。これで1.82.02rc1を入れたら日本語フォルダもどんとこいですね。いやはやお疲れさまでした。

—————————— 追記 ——————————

1.82.02で修正されるUnicodeの問題について、Matplotlibのアップグレードの方法がわからなくて困っている方がおられるようなので大急ぎで作成したのですが…。ここまで書き上げてpsychopy-usersを見たら、なんとJonがMatplotlib 1.4.3を組み込んだStrandAlone版PsychoPy 1.82.02rc1を投稿していました。StandAloneのrc1が公開されるなら、この忙しい中急いで作成する必要なかったのに。

https://github.com/psychopy/psychopy/releases/download/1.82.02rc1/StandalonePsychoPy-1.82.02-win32.exe

まあ、StandAlone版でeasy_installやpipを使える方法を解説しておけば、GazeParserやpyAPIUSBPなんかも簡単に導入できるので、そのための解説だったと思うことにします…。