Windows上でPython-3 x64へC拡張パッケージを導入するためのTips |
[2013/9/6] 工事中・・・。
いくつものリリースされているパッケージを利用してPythonのスクリプトを利用するにはいくつか壁になり得るものがある。 コンパイルには、正常に動作するコンパイラとコンパイルの条件や順番を記述した設定ファイルが必要である。
Windowsにおいて、Python.exeまでパスが通ってさえいれば、Pythonにパッケージを追加するには「setup.py install」コマンドなどを用いて導入することができる。 ただし、パッケージによってはsetup.pyがPython-2.x用にしか書かれていない場合があり、そのままでは導入できないことがある。 大抵は、エラーをスローする文法上の問題だったり、print("Python-3.xではこの中にコメント")と書くべきところをprint "Python-2.xではこの中にコメント"にしていたりなどが原因である。 時にはPython-2.xで利用されていたstringモジュールが使えなくなっていたりなどの問題もある。
パッケージの中には高速性やC言語で作成されたライブラリを利用するためにCやC++で記述されたソースコードをビルドする必要があるものがあります。 例えばnumpyやmecab-pythonです。 numpyやscipy,matplotlibはWindows用にコンパイル済みのバイナリ版がリリースされているので必ずしもコンパイルは必要ありませんが、mecab-pythonの様なパッケージの導入にはコンパイルが必要であり、ここで躓きやすい。
インストールしようとするC言語のソースコードも64 bit環境に対応している必要がある。 例えば、mecab-pythonの様にC言語のソースコードがx86用にしか記述されていない場合はコンパイラがエラーを出力してコンパイルができない。
WindowsでPythonスクリプトを実行する環境を整える方法について説明します。
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ページの深い場所にあるリンクを探すとダウンロードできる。
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に関するいくつかの更新を行ったが、問題は出なかった。
不幸にも「vcvars64.bat」が存在しなかった場合、状況に合わせて手順が分かれる。 「vcvars64.batは無くても、「amd64」フォルダとそのフォルダ内にコンパイラ類が入っているのであれば、「vcvars64.bat」を自作すればよい。 そうではなく、コンパイラがインストールされていない場合は概ね以下の手順を踏むようだ。
VS2010のインストールフォルダ内に「vcvars64.bat」が存在しない場合、VS2010単体でのコンパイラ導入をあきらめ、Microsoft SDKを利用する。 ただし、Microsoft SDKのインストールは、マシンにVS2010の新しいバージョンが既に入っている場合はインストールに失敗する。 従って、一旦VS2010のコンパイラ関係の一切を削除する。 ネットで集めた情報によると、以下の手順を踏む。
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++コンパイラを利用できるので、それほど難しくないはずだ。
ではいよいよスクリプトを実行してみましょう。
Pythonは対話式にスクリプトを組むこともできますが、ここではテキストファイルに保存したコードを実行することで動作を確認してみましょう。
以下のテストスクリプトを適当なフォルダにコピーしてください。
(念のために断っておきますが、ウイルスチェック等はしっかりした上で解凍・実行してくださいね。無保証ですんで…。)
テストスクリプト
コマンドプロンプトのショートカットを同じフォルダ内に作って、そのプロパティから作業フォルダを空欄にしてください。 その上でプロンプトへ"GPS.py"と入力すれば図3.1に示すような出力が得られるはずです。
オンライン上で公開されているpdfのマニュアルをダウンロードすれば言語的な大抵の疑問は解決します。 それを読んでも分からない場合や、導入で詰まりそうなときは以下の書籍を参照してください。 個人的には、[1]をお勧めします。
[1]柴田淳,みんなのPython 第3版,ソフトバンククリエイティブ株式会社,2012/8. :他の言語を書けるならこの本がお勧めです。
[2]細田謙二 他,Python入門,秀和システム,2011/12. :やや辞書的な位置付けです。
[3]辻真吾,Pythonスタートブック,株式会社技術評論社,2010/5. :Python以前に、プログラミングが初めてという超初心者向けの本です。学部の4年生に良いかも。