Windows7にPython3.4の後にPython3.3をインストールしてはまったこと
Windows7にPython3.4をインストールした後、PyAudioがPython3.3までしかサポートしていないことがわかり、Python3.3をインストールしたのだが、PyAudioのサンプルプログラムを動作させようとしてはまってしまった。
PyAudio: PortAudio v19 Python BindingsのExamplesをエディタにコピペしてsample.pyの名前で保存した。いつものように、拡張子.pyにはPythonが関連づけてあるから、sample.pyを実行させた。
> sample.py Please build and install the PortAudio Python bindings first.
PortAudioをインストールしなさいというメッセージがでてサンプルが実行できない。インストールした C:\Python33\Lib\site-packages\pyaudio.py を開いてメッセージを表示する部分をみると、
# attempt to import PortAudio try: import _portaudio as pa except ImportError: print("Please build and install the PortAudio Python " + "bindings first.") sys.exit(-1)
_portaudioモジュールを読み込もうとしたときに例外が発生しているようだ。C:\Python33\Lib\site-packagesディレクトリにはちゃんと_portaudioモジュールがあるし、そのほかに原因があるのだろうか、と悩んでしまった。
そこでまずは基本にもどり、pythonを起動してから、import pyaudio とやると上述のメッセージは出ない。ということは、コマンドプロンプトで sample.py とファイル名だけで実行させると、Python3.4が起動して実行していた。python sample.py とやれば、Python3.3が起動してsample.pyが実行される。
Windows7の拡張子付けを調べてみた。
>assoc .py .py=Python.File >ftype python.file python.file="C:\Windows\py.exe" "%1" %*
ファイル拡張子 .py にファイル・タイプ Python.Fileが定義付けされている。起動するプログラムは “C:\Windows\py.exe" “%1" %* であることがわかった。Ptyon3.4をインストールしたときに py.exe が作られていたが、その後でPython3.3をインストールしても上書きされていない。Python3.3と3.4のインストール挙動の違いがハマリの原因だった。
試しに、バージョンを表示するプログラムを書いて実行すると、
# test.py import sys print(sys.version)
>test.py 3.4.2 (v3.4.2:ab2c023a9432, Oct 6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] >python test.py 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)]
スクリプトの前にちゃんと python を入力すれば問題無いのだった。