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 を入力すれば問題無いのだった。