Windows上でPython-3 x64へC拡張パッケージを導入するためのTips

森下功啓製作所 ONLINE

[2013/9/6] 工事中・・・。


1. Pythonのパッケージ利用上の壁

いくつものリリースされているパッケージを利用してPythonのスクリプトを利用するにはいくつか壁になり得るものがある。 コンパイルには、正常に動作するコンパイラとコンパイルの条件や順番を記述した設定ファイルが必要である。


1.1 Python-2.xとPython-3.xの文法上の違い

Windowsにおいて、Python.exeまでパスが通ってさえいれば、Pythonにパッケージを追加するには「setup.py install」コマンドなどを用いて導入することができる。 ただし、パッケージによってはsetup.pyがPython-2.x用にしか書かれていない場合があり、そのままでは導入できないことがある。 大抵は、エラーをスローする文法上の問題だったり、print("Python-3.xではこの中にコメント")と書くべきところをprint "Python-2.xではこの中にコメント"にしていたりなどが原因である。 時にはPython-2.xで利用されていたstringモジュールが使えなくなっていたりなどの問題もある。


1.2 C言語で記述されたソースコードを含むパッケージの導入コンパイラの用意

パッケージの中には高速性やC言語で作成されたライブラリを利用するためにCやC++で記述されたソースコードをビルドする必要があるものがあります。 例えばnumpyやmecab-pythonです。 numpyやscipy,matplotlibはWindows用にコンパイル済みのバイナリ版がリリースされているので必ずしもコンパイルは必要ありませんが、mecab-pythonの様なパッケージの導入にはコンパイルが必要であり、ここで躓きやすい。


1.2.1 コンパイラの用意


1.2.2 x86とx64の違い

インストールしようとするC言語のソースコードも64 bit環境に対応している必要がある。 例えば、mecab-pythonの様にC言語のソースコードがx86用にしか記述されていない場合はコンパイラがエラーを出力してコンパイルができない。


2. コンパイラ

WindowsでPythonスクリプトを実行する環境を整える方法について説明します。


2.1 Windowsの場合

Windows向けのビルド済みPythonはMicrosoft社のVisual Studioでコンパイルされている。 利用しているPythonのバージョンに合わせてコンパイラをインストールすればよい。 例えばPython-3.3.xのビルドにはVisual Studio 2010のC++コンパイラが利用されている。 参考:https://code.google.com/p/python-geohash/wiki/DeveloperNote http://draftcode.github.io/2013/03/17/5f45fabb-8b64-469e-a0f6-7f9d76564af8.html *VS2008はMicrosoftのWEBページの深い場所にあるリンクを探すとダウンロードできる。


2.1.1 x86環境へのコンパイラのインストール

64 bitで動作するPython環境へ導入する場合、コンパイラのインストールで躓く場合がある。 Visual Studioというコンパイラ(とその開発環境)は、バグを修正したり機能を拡張するためにサービスパック(SP)やWindows更新によるパッチの配布が行われている。 2013年9月現在、手に入るVisual Studio 2010 Professionalをインストールした場合は問題はないが、Visual Studio 2010 Expressを利用する場合はバグの修正作業が必要となる。 Visual Studio 2010 Expressをインストールしても、なぜかx64用のコンパイラがインストールされないことがあるのだ。 x64版のWindowsを利用してる場合、「C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin」を見て欲しい。 x86版のWindowsを利用してる場合は、「C:\Program Files\Microsoft Visual Studio 10.0\VC\bin」だ。 そこには「amd64」というフォルダと、その中に「vcvars64.bat」というファイルはあるだろうか? なお、Visual Studio 2010 Expressのインストール直後には「vcvars64.bat」が存在したとしても、Windowsの更新で適用されるVisual Studio 2010のサービスパック1(SP1)にはx64用のコンパイラ一式を削除するというバグがあるらしいのだ。 というか、2013年9月現在、私が利用しているWindows 7 x64マシンにインストールすると、「amd64」フォルダそのものがインストール直後から存在しなかった。 ちなみに、Microsoft Dream SparkよりダウンロードしたVisual Studio 2010 Professionalを私のWindows 7 x64マシンへインストールを行ったところ、ちゃんと「vcvars64.bat」は所定の位置に存在した。 サービスパック1(SP1)をインストールして、さらにVisual Studioに関するいくつかの更新を行ったが、問題は出なかった。


2.1.2 「vcvars64.bat」が存在しない場合の対処

不幸にも「vcvars64.bat」が存在しなかった場合、状況に合わせて手順が分かれる。 「vcvars64.batは無くても、「amd64」フォルダとそのフォルダ内にコンパイラ類が入っているのであれば、「vcvars64.bat」を自作すればよい。 そうではなく、コンパイラがインストールされていない場合は概ね以下の手順を踏むようだ。


2.4 Microsoft SDK 7.1をインストールして、VS2010 C++コンパイラの導入

VS2010のインストールフォルダ内に「vcvars64.bat」が存在しない場合、VS2010単体でのコンパイラ導入をあきらめ、Microsoft SDKを利用する。 ただし、Microsoft SDKのインストールは、マシンにVS2010の新しいバージョンが既に入っている場合はインストールに失敗する。 従って、一旦VS2010のコンパイラ関係の一切を削除する。 ネットで集めた情報によると、以下の手順を踏む。

  1. VS2010の関連プログラムをアンインストール
  2. Microsft SDK(コンパイラのみをインストールできる)
  3. VS2010を再インストール
  4. Windows更新を可能な限り行う(必ずサービスパックの適用を行うこと)
  5. サービスパックで削除された可能性のあるコンパイラの復旧
  6. この時点で、「C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin」又は「C:\Program Files\Microsoft Visual Studio 10.0\VC\bin」に「vcvars64.bat」が存在しなければ、仕方がないので自作する。
対処方法はいくつかあるが、以下の参考文献が最も簡単だと思った。 参考:

2.5 「vcvars64.bat」の自作

VS2010をインストールした時点で「amd64」はあったが「vcvars64.bat」はなかったという場合、 「CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64」と記述してテキストファイルを保存する。 試していないが、1) ~ 3)をすっ飛ばして、5)の適用後に必ずx64用のコンパイラがインストールされるので、それを利用するようにバッチファイルを書き換えてもいいはずだ。 が、普通にSDK入れた方が良いが、VS2010で新しいコンパイラが既に入っている場合はエラーになる。 蛇足: Visual Studio 2010には問題が多いので、Python開発チームには早いところ開発環境をVisual Studio 2012へ移して欲しいと思う。 又は、g++を使うとか。 最近はWindowsでもCygwinを使わずにC++11に対応したC++コンパイラを利用できるので、それほど難しくないはずだ。


3. テストスクリプトの実行

ではいよいよスクリプトを実行してみましょう。 Pythonは対話式にスクリプトを組むこともできますが、ここではテキストファイルに保存したコードを実行することで動作を確認してみましょう。 以下のテストスクリプトを適当なフォルダにコピーしてください。 (念のために断っておきますが、ウイルスチェック等はしっかりした上で解凍・実行してくださいね。無保証ですんで…。)
テストスクリプト

コマンドプロンプトのショートカットを同じフォルダ内に作って、そのプロパティから作業フォルダを空欄にしてください。 その上でプロンプトへ"GPS.py"と入力すれば図3.1に示すような出力が得られるはずです。

実行画面
図3.1 テストコードの実行画面

参考文献

オンライン上で公開されているpdfのマニュアルをダウンロードすれば言語的な大抵の疑問は解決します。 それを読んでも分からない場合や、導入で詰まりそうなときは以下の書籍を参照してください。 個人的には、[1]をお勧めします。

[1]柴田淳,みんなのPython 第3版,ソフトバンククリエイティブ株式会社,2012/8. :他の言語を書けるならこの本がお勧めです。
[2]細田謙二 他,Python入門,秀和システム,2011/12. :やや辞書的な位置付けです。
[3]辻真吾,Pythonスタートブック,株式会社技術評論社,2010/5. :Python以前に、プログラミングが初めてという超初心者向けの本です。学部の4年生に良いかも。

inserted by FC2 system